初始化与清理
构造器
通过 new 来创建类的对象。每当调用 new 来创建对象时,java 会调用构造器对象进行初始化。初始化完毕,意味着这个对象已经准备好对外提供服务了。
如果一个类没有显式提供构造器,则编译器会为该类自动生成一个默认构造器。
构造器采用与类名相同的名称。
class Rock {Rock() { //This is the constructor
System.out.println("This is the constructor");
}
}
重载
Java 支持构造器和方法的重载(不是重写 override)
区分重载
方法的签名:方法名 + 参数列表
通过方法的签名来区分重载,所以返回类型不作为区分重载的因素。
this 关键字
对当前对象的引用
有了 this 关键字可以实现在构造器中调用其他重载构造器,如:
class Rock {
public int id;
Rock(int id) {this.id = id;}
Rock() {this(1);
}
}
初始化
对类变量的初始化有两种方法:
- 在申明时直接初始化
- 显式初始化
- 在构造器内进行初始化
初始化顺序:
通过 new 创建对象时,对象的初始化顺序:
- 对申明的变量进行变量的默认值的初始化:变量的申明可以散落在类的定义的不同位置,但初始化时,会按申明的先后顺序,完成初始化然后调用构造函数进行初始化;
- 调用构造器:如果变量未在申明时就完成初始化,则可以通过构造器完成初始化;
- 静态数据的初始化优先于非静态数据;
初始化例子
public class Rock {
public int id = 1; //initialization when define
public String name;
public static String greeting1;
public static String greeting2;
public static int age = 1000;
static{greeting1 = "Hello"; //explicitly initialization}
Rock(String name) {
this.name = name; // initialization in constructor
greeting2 = "Hi";
}
public String location1 = "Shanghai";
public String getName(){return name;}
public String location2 = "China";
public String getLocation(){return location1 + "-" + location2;}
public void greeting(){System.out.println(this.greeting);
}
public static void main(String[] args){Rock r = new Rock("Robin");
System.out.println("Name:" + r.getName());
System.out.println("Location:" + r.getLocation());
r.greeting();}
}