什么是构造器
public class Test {
public static void main(String[] args) {
Human human = new Human();
// Human: 类型,决定了对象的类型(在内存当中的构造形式,以多少的步长读取一个对象)int a = 1; float b = 0.2f;
// human:对象名称,在栈内存的局部变量表中
// new: 关键字,在堆内存中开辟内存空间
// Person():构造器,给对象赋初始值(有参构造才能赋初始值)
}
}
构造器的特点
public class Human {
private int age;
private String name;
// 有参构造,可以为对象赋初始值
public Human(int age, String name) {
this.age = age;
this.name = name;
}
// 无参构造
public Human() {
}
}
- 构造器名与类名相同,紧跟在new关键字之后
- 每个类当中,都有默认的不显示的构造器,也就是无参构造器
当我们自己重新写一个有参的构造器,默认的无参构造器将会被覆盖
但是无参构造器又是很常用的,所以我们一定要记得写一个无参的默认的构造器 - 构造器没有返回值,如果带上了返回值,此方法就不是构造器了
- 一个类当中可以有很多构造器,参数列表一定不相同(构造器重载)
- 构造器可以被public、protected、private这三个关键词修饰,不能用缺省修饰;
private修饰的构造器,表示禁止外部类实例化
private修饰的构造器:单例模式
Java中private关键字修饰方法,表示该方法只能在这个类内部调用
我们将构造方法声明为private,这样其他的类就不能直接调用该类生成新的对象,也就避免了同一个类被反复创建的情况,这种情况,该类只有一个对象实例
这种思想也就是单例模式的设计思想。在该种思想模式下,一个类只能是对应于一个对象,没有其他的类可以创建新的对象,这也就保证了单例模式下只有一个对象。
私有无参构造方法的实例
私有构造方法已经广泛应用于jdk当中。下面用jdk中RunTime的部分源码展示一下:
public class Runtime {
private static Runtime currentRuntime = new Runtime();
/**
* Returns the runtime object associated with the current Java application.
* Most of the methods of class <code>Runtime</code> are instance
* methods and must be invoked with respect to the current runtime object.
*
* @return the <code>Runtime</code> object associated with the current
* Java application.
*/
public static Runtime getRuntime() {
return currentRuntime;
}
/** Don't let anyone else instantiate this class */
private Runtime() {}
// …………………………
}