构造方法
创建实例时,实际上是通过构造方法来初始化实例的。通过构造方法,可以在创建实例时一次性传入想传入的一个或多个参数,完成初始化。
class Person{
private String name;
private int age;
private int grade;
public Person(String name,int age,int grade){
this.name = name;
this.age = age;
this.grade = grade;
}
}
由于构造方法很特殊,所以构造方法的名称就是类名。构造方法的参数没有任何限制,在方法内部也可以任意编写语句。和普通方法相比,构造方法没有返回值(连void也没有),调用构造方法,必须使用new操作符。
person P = new Person("Xiao Ming",18,9);
默认构造方法
没有构造方法为什么可以使用new操作符?
一个类如果没有定义构造方法,java编译器会自动为这个类生成一个默认构造方法,它没有参数没有执行语句,类似于
class person{
private String name;
public Person(){
}
}
如果定义了构造方法,则不再自动生成默认构造方法。
初始化字段
没有在构造方法中初始化字段时,引用类型字段的默认值是null,int类型的默认值是0,布尔类型的默认值是false
class Person{
private int age; //默认值0
private String name; //默认值null
public Person(){
}
}
可以在创建字段时直接对字段初始化
class Person{
private int age = 18;
private String name = "Xiao Ming";
public Person(){
}
}
如果既对字段初始化,又在构造方法中初始化字段时,字段的初始值是什么?
答案是,字段先在创建时被初始化,然后再调用构造方法,被构造方法初始化,所以最终的值是构造方法初始化的值
多构造方法
可以创建多个构造方法,在操作new操作符的时候,编译器根据传入参数个数、位置、类型的不同自动区分。
class Person{
private String name;
private int age;
public Person(String name){
this.name = name;
}
public Person(Sting name,int age){
this.name = name;
this.age = age;
}
public Person(){
}
}
一个构造方法中可以用this(…)调用另一个构造方法,便于代码复用
public Person(String name,int age){
this.name = name;
this.age = age;
}
public Person(String name){
this(name,18) //此处调用了Person(String name,int age)方法
}
public Person(){
this("unnamed") //此处调用了Person(String name)方法
}