方法重载

来源:互联网 发布:手机照片恢复软件免费 编辑:程序博客网 时间:2024/06/10 18:43
方法重载名字相同参数的列表(形式参数)不同的两个(或多个)方法称为重载方法,
重载方法的语言环境:
参数列表的不同体现在以下两点
{
***参数列表的个数不相同
***参数列表所对应的参数类型不同
}

构造器:



//面向对象
//对象的使用,方法的调用,成员变量,局部变量,变量的默认值
参数的传递
值传递 基本类型
引用传递  引用数据类型
对象的使用  
    先声明 类名 对象名;
        初始化  new 类名();
       创建对象的过程叫实例化;
       内存中的变化
      声明时在栈内存中分配了变量名的空间,此时变量名是一个对象(引用)类型的  
      初始化时在堆中分配了对象的内存空间,还将对象所在的地址引用赋值给了在栈内存中的引用;

     Person  p ; //在栈内存中创建了对象的引用,此时这个引用值是null,指向了一个空的对象
     p  = new Person(); //在堆内存中创建了对象,并将该对象的引用地址赋值给了p;


//C语言中的指针;
int *p ;
int a = 10;
p = &a;

参数的传递
    形参一般在写一个方法的时候,在方法中定义一个局部变量
        public void f(int x,int y){}
           实参:调用该方法的时候,实际传递过去的参数
     可变参数:f(int ...a)   f(1) f(1,2,3,4)  f(3,4);
public static void main(String ... args)       
参数的值传递
两种方式都是值传递
引用类型:f(A x)
      Aa = new A(); int i = 10;
      f(a);

a, x ----------------> A
x----------------> A     i + 10;
a-------------------->A
栈产生两个引用变量值相等
栈          堆内存
a              A
x
基本类型:
int a = 100;
f(int x)
{
x = x + 100;
}
f(a);   x = a;      //x无论发生什么变化,与a无关a复制了一份给了x
a = 100;



方法的重载
为了重复利用
参数类型不一样
参数的个数不一样
参数的顺序不一样
Overload 发生在一个类中,与父类没有关系
class A
{
public void query(int id)
query(int id,String name);
}             


构造器
      每一个类都有一个构造器,用来对对象进行初始化。
      是对象被创建出来自动调用的第一个方法;没有返回值;
     构造器也叫构造方法,没有返回值,但也不是void
     默认是无参的构造方法
     方法名与类名相同
不论显式声明的构造器是否具有参数,默认的构造器都将不复存在。

构造器的重载
class A{
public A()
{}
public A(int i, int j)
{}
public A(String x)
{}
}

A a = new A(); //调用构造方法了吗?无参
A a2 = new A(2,3);
成员变量局部变量和方法;
成员变量:类范围内定义,有默认值,在堆内存中,作用于整个类
局部变量:没有默认值,在栈内存中,作用与局部

在同一个类创建多个对象时
          局部变量会隐藏成员变量
         成员变量各对象独有
         方法个对象共享;
变量的默认值:
                   基本数据类型的默认值
                 引用类型:NULL;
this
正在执行本方法的当前对象;
class A{
private int a;
public void f(int a)
{
this.a= a;
}
}

A a = new A();
a.f(23, A this) //this = a;

用this调用其他构造方法时,必须遵守以下语法规则
假如在一个构造方法中使用了this语句,那么它必须作为构造方法的第一条语句,
例如:public Person()
{
String name = “Mary”;
this(name);
}
//编译错误,this语句必须作为第一条语句}
this语句调用构造器
只能在一个构造方法中用this语句来调用类的其他构造方法,而不能在实例方法中用this语句来调用类的其他构造方法。
只能用this语句来调用其他构造方法,而不能通过方法名来直接调用构造方法,
例如: public Person(){
String name = “Mary”;
Person(name);  //编译错误,不能通过方法名来直接调用构造方法
}
this 总结
this用于任何实例方法内,指向当前对象。
this 的值指向对其调用当前方法的对象。this 关键字可在需要当前类类型的对象引用时使用。 在构造方法或者实例方法中,如果方法(构造器)参数和成员变量同名,则需要使用this来访问被隐藏的成员变量。注:不能在静态成员中使用this关键字,因为静态成员不是对象实例的一部分。




//实例方法  创建完对象后实例方法才存在;
main方法不是实例方法
是静态方法(static)加上static之后就不是实例方法了
加上static之后就没有this方法了;
实例new A()创建一个实例
静态方法不创建对象也能调用,实例方法创建对象才能调用;

区别:
构造方法:构造方法是用来构造类的对象的,方法名和类名相同没有返回值。一般用 new 构造方法名() 来创建该类的对象。在不写构造方法的情况下会有一个默认的无参构造方法,当然你也可以重写和重载构造方法(建议你找一本《Java编程思想》看看,里面讲的很透彻)。

实例方法:简单地说就是可以通过类的实例(某个对象)调用的方法,也就是我们正常情况下使用的方法。实例方法也称成员方法(成员方法和成员变量的知识你可以参考《Java编程思想》)。

类方法:简单地说就是直接可以用类名调用的方法,也就是被关键字static修饰的方法,它不需要创建类的对象来调用该方法。(关于static关键字的详细用法你也可以在《Java编程思想》这本书中找到)。
方法必须定义在类里,要么属于对象,要么属于类




1 0
原创粉丝点击