java学习第六周

1.用构造器确保初始化

class Rock{…
}
…
new Rock();

在创建对象时new Rock( )将会为对象分配存储空间。
Rock()是构造方法。
构造器的名称必须与类名完全相同。
默认构造函数不接受任何参数,类的设计者不写,系统也会自动创建。一但设计者编写了构造函数,默认构造函数就不存在了。
在java中“初始化”和“创建”捆绑在一起,两者不能分离。
构造函数没有返回值。

public static void main(string[] args)
{int i;
system.out.println(i);//为初始化,报错
Dog d=new dog();
d. xxx();
}
class Dog{
int i;//i是对象成员,未赋值时会默认初值为0
private void xxx()
{system. out.println(i);
int j;
system. out. println(j);//报错,未初始化
}
}

除了类的对象成员为初始化时有默认值,其他变量创建时都需要初始化。
2.方法重载
参数类型,参数个数,参数顺序

public static void main(string[] args)
sum(1,2);//报错
public int sum(int a,int b)
{return a+b;}
public double sum(double a,double b){
return a+b;}
//补救方法如下两种
//第一种方法main()里加
demo2 d=new demo2();
int a =d. sum(1,2);
//第二种方法将两个sum()改为static类型方法
public static int sum(int a,int b)
{return a+b;}
public static double sum(double a,double b)
{return a+b;}

如果传入的类型数据(实际参数类型)小于方法中声明的形式参数类型,实际数据类型就会被提升。char型略有不同,如果无法找到恰好接受char参数的方法,就会把char直接提升到int型。
如果传入的实际参数类型较大,就得通过类型转换来执行窄化转换。如果不这么做,编译器就会报错。
3.this 关键字

calss Banana{
 void peel(int i){…}
 public class Bananapeel{
 public static void main(string[] args)
 {Banana a=new Banana(),b=new Banana ();
 a. peel(1);//this 暗自把“所操作对象的引用”作为第一个参数传递给peel()。
 b. peel(2);}
 }
 }


this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。this的用法和其他对象引用并无不同。
构造器里调用构造器:
通常写this的时候,都是指“这个对象”或者“当前对象”而且它本身表示对当前对象的引用。在构造器里,如果为this添加了参数列表,那么就有了不同的含义。

class Bird {
public Bird(string name)
{this.name=name;}//this不能省略
public void xxx(){}
public void yyy()
{this.xxx();此处的this可省略
}
}
public Bird()
{this ("abc")//调用第二个构造函数
system. out.println("第一个构造函数");
}
public Bird(string name)
{//this.Bird();//报错
this();//此处this()是指第一个构造器,只能位于第一位。
this. name=name;
}

尽管可以用this 调用一个构造器,但却不能调用两个。此外,必须将构造器置于最始端,否则编译器会报错。
除构造器之外,编译器禁止在其他任何方法中调用构造器。