什么是构造器
构造器通常也叫构造方法、构造函数,在项目中几乎无处不在。当给类创建一个对象时,new
关键字实际上是在调用构造器。在调用构造器的时候,如果类中没有写构造器,那么系统会默认分配一个空构造器,也可以自己显式地将构造器编写出来,其格式为:
[修饰符] 类名(){} // []中的修饰符是可选项
创建对象的过程
第一次执行到某个类创建对象的代码的时候,会进行类的加载,此时类的字节码信息会被加载到方法区。与此同时,系统会为这个对象在堆中开辟空间,然后为对象进行属性的初始化。需要注意的是,类的字节码信息只会在第一次创建对象的时候被加载一次。
构造器的作用
构造器的作用不是为了创建对象,因为在调用构造器之前,这个对象就已经创建好了,并且属性有默认的初始化的值。调用构造器是给属性进行赋值操作的。需要注意的是,我们一般不会在空构造器中进行初始化操作,因为那样的话每个对象的属性就都一样了,我们只需要保证空构造器的存在即可。
构造器和普通方法的区别
- 构造器没有方法的返回值类型
- 构造器没有
return
语句 - 构造器的名字要跟类名保持一致
构造器的重载
因为我们一般不会在空构造器中进行初始化操作,所以一般要重载构造器,在重载的构造器中对属性进行赋值操作。需要注意的是,在重载构造器以后,如果空构造器忘写了,系统也不会给你分配默认的空构造器了,那么你要调用的话就会出错。
下面是一个构造器重载的例子:
public class Person {
String name;
int age;
double height;
public Person(){}
public Person(String name,int age,double height){
this.name = name;
this.age = age;
this.height = height;
}
public Person(String a,int b){
name = a;
age = b;
}
public void eat(){
System.out.println("我喜欢吃饭");
}
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("lili",19,180.4);
System.out.println(p2.age);
System.out.println(p2.height);
System.out.println(p2.name);
}
}
这里有一点要注意,当形参名和属性名相同的时候,会出现就近原则,例如上面代码中的一个构造器写成下面这样:
public Person(String name,int age,double height){
name = name;
age = age;
height = height;
}
此时等号左侧的变量都会以为自己表示的是形参,而不是类的属性。所以我们需要在要表示对象的属性前加上 this.
来修饰 ,因为 this
代表的就是你创建的那个对象。