构造器
在下面代码栗子中,当new出一个Student对象的时,必须给新生成的学生起名字(毕竟不存在一个没有名字的人),但是当新建的对象数量过多的时候就有可能会忘记分配名字。
public class Student { String name;
public void words() { System.out.println(name + " is a student."); }
public static void main(String[] args) { Student t = new Student(); t.name = "Tom"; t.words(); } }
|
这个时候,如果你new出一个新的对象,你想但是又不想它的初始状态为空值,这时就可以用构造器来大显身手了。所以我们不妨在new出该对象的同时,赋给其某些变量的初始值(这里是学生姓名)。
public class Student { String name; public Student(String name) { this.name = name; } public void words() { System.out.println(name + " is a student."); }
public static void main(String[] args) { Student t = new Student("Jerry"); t.words(); } }
|
默认构造器
但是在有的时候我们编写类的时候,并不会编写类的构造函数,这时,编译器会默认给我们添加上一个没有参数的构造函数(依然采用上述的Student类)。
编译器会添加上述的构造函数到类中。但是如果开发者在开发过程中,自己编写了新的构造函数,那么编译器便不会添加默认的构造函数。
构造器的重载
如果类在创建的时候,存在多个参数,或者是否给实例变量赋于初值无关紧要的话。这时候如果编写了一个构造函数的话,那么默认的构造函数便不会再添加其中,但又想要添加默认的构造函数。这时,我们直接对构造函数进行重载来实现我们需要的功能。
public class Student {
String name; int age;
public Student() { }
public Student(String name) { this.name = name; } public Student(int age) { this.age = age; }
public Student(String name, int age) { this.name = name; this.age = age; } public Student(int age, String name) { this.name = name; this.age = age; }
public void words() { System.out.println(name + " is a student, age is " + age); }
public static void main(String[] args) { Student t0 = new Student(); Student t1 = new Student("Jerry"); Student t2 = new Student(10); Student t3 = new Student("Tom",12); Student t4 = new Student(15,"Peter"); t3.words(); t4.words(); } }
|
Tips
- 构造器没有类型,没有返回值。
- 构造函数的方法名必须和所在类的名称必须一致。
- 如果不编写构造器,编译器会自动添加一个没有参数,不执行任何操作的构造函数。
- 如果用户编写了单一构造函数,那么系统便不会再添加默认构造函数。
- 如果要添加多个构造函数,需要用到重载。