构造方法
在多数情况下,初始化一个对象的最终步骤是去调用这个对象的构造方法。构造方法负责对象的初始化工作,
为实例变量赋予合适的初始值。构造方法必须满足以下语法规则:
构造方法 的要求
·方法名必须与类名相同。
· 不要声明返回类型。 --和一般方法的区别
· 不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承,所以用final和abstract修饰没有意义。
构造方法用于初始化一个新建的对象,所以用static修饰没有意义。多个线程不会同时创建内存地址相同的同一个对象,
因此用synchronized修饰没有必要。此外,Java语言不支持native类型的构造方法。
1 构造方法是在实例化类的时候就会执行的程序
Duck d=new Duck ();
2构造方法必须与类名相同,并且没有返回的值
public Duck(int i){
}
3如果没有写构造方法,虚拟机会帮你写一个没有参数的构造方法
public Duck(int i){
}
3一个类可以有多个构造方法,这叫构造方法的重载(overload)参数必须不一样
public Duck(int i){
}
public Duck(int i){
}
如何调用父类的构造函数。
super();关键字用来调用父类的构造函数。
编译器会自动加上super的调用。 有两者情况:
//没有构造函数
1 public ChildrenClass (){
super();
}
2 //有构造函数,但是没有调用super();编译器会自动加上
}
编译器帮忙的一定是没有参数的版本。
public class FatherClass {
public FatherClass(int i){
System.out.println("father ii");
}
}
public class ChildrenClass extends FatherClass {
public ChildrenClass (int i){
System.out.print("i");
//编译报错implicit super constructor FatherClass() is undefined. Must explicitly invoke
//another constructor
}
对super()的调用必须是在构造函数的第一句话
构造方法之间 的重载
public class ChildrenClass extends FatherClass {
public ChildrenClass (int i){
i=i+1;
System.out.print(this.getI());
}
public ChildrenClass (){
this(99);
System.out.print(this.getI());
}
使用this()来从一个类的某个构造函数调用另外一个构造函数
this()只能放在构造函数中,并且必须是在第一行。
super()和this()不能一起用
//Constructor call must be the first statement in a constructor