Java构造器的理解
构造器的引入
当我们想获取某一个类的对象的时候,其中最简单也是最快的方法就是通过 new 关键字来获取:
//获取 people 对象
People perple = new People();
这个过程,就是引用了 People 类的无参构造器,这就确保了你能操作对象之前,它已经被初始化了。在 Java 中,通过提供构造器,类的设计者可以保证每个对象都能得到初始化。
构造器就是一个在创建对象时被自动调用的特殊方法,该方法没有返回值。这与返回值为空(void)的情况不同,对于空返回值,尽管方法本身不会返回什么,但仍可选择让它返回别的东西。构造器则不会返回任何东西,new 表达式确实返回了新建对象的引用,但构造器本身没有任何返回值。
构造器的命名
既然构造器是一个方法,那么就产生了第一个问题,构造器的命名不能与类里面的方法名冲突;第二个问题就是必须让编译器知道应该调用哪个方法。Java 采用的解决方案就是构造器与类具有相同的名称。该方法完美解决了以上的两个问题(方法命名和自动调用)。
此处需要注意一点,由于构造器具有与类相同的命名,所以首字母需要大写,”方法首字母小写” 的编码风格不适用于构造器。
构造器的形式
不接受任何参数的构造器叫做默认构造器,也称为无参构造器。当类的设计者没有在类中添加构造器的时候,编译器会默认的加上一个无参构造器。
public class People {
private String name;
//无参构造器
public People() {
}
}
但在初始化对象时需要带有形式参数的时候,就可以使用有参构造器了。
public class People {
private String name;
//有参构造器
public People(String name) {
this.name = name;
}
}
这样就可以通过有参构造器创建带有 name 的 People 对象了。
//创建带有名字的对象
People people = new People(“Tom”);
如果 People 类中只有一个有参构造器 People(String name),那么编译器就不会允许你用其他的方式创建 People 的对象了,比如使用 new People() 的方式来创建不带 name 的 People 对象,这种操作是不被允许的,如果想完成这个操作,那么在类中再创建一个无参构造器即可。
public class People {
private String name;
//无参构造器
public People() {
}
//有参构造器
public People(String name) {
this.name = name;
}
}
这样就可以通过有参构造器和无参构造器来创建带有 name 和不带 name 的对象了。
super 关键字
构造器是不能被继承的,如果子类要调用父类中的构造器,那么就必须要用到 super 关键字了。
public class Chinese extends People {
public Chinese() {
super();
}
public Chinese(String name) {
super(name);
}
}
Chinese 类中的两个构造器中包含了 super 关键字,它的作用就是父类中的构造器实例化,加入到 Chinese 中。super 关键字只能放在首行,并且如果没有加上 super 关键字,编译器会自动加上。如果子类中没有添加任何构造器,那么子类会默认调用父类中的无参构造器,如果父类没有无参构造器,子类又没有显示地调用父类中的构造器,那么将会报错。