构造方法
1.为什么需要构造方法?
因为使用new关键字创建对象的本质是调用constructor(构造器)在堆内存中开辟内存空间来实例化对象。
Student s1 = new Student();//注意是 Student(),是一个方法名
2.怎么定义构造方法?
[修饰符列表] 构造方法名(){
//方法体
}
其中,1. 构造方法名必须和类名一致
2. 系统会默认产生一个无参构造方法(缺省构造器)
3.当定义了有参数的构造方法时,要使用缺省构造器必须显式定义
4.无参数的构造器和有参数的构造器本质上是方法的重载。
2.构造方法的作用:
1. 用来创建实例化对象
2. 实现对象的属性初始化赋值
3.构造方法怎么调用?
使用new关键字调用
思考:实例变量的默认初始化是在什么时候进行的?
是在类加载的时候吗?显然不是。类加载的时候对象还没有实例化,也就不存在实例变量,无法初始化。
是在构造方法中进行默认初始化的吗?
是的,使用new关键字调用构造方法时,构造方法中会对 对象的实例变量进行初始化。若没有手动赋值则会赋系统默认值
- 定义一个Vip类,其中包含四个构造方法:
public class Vip{
//会员号
int id;
String name;
String birth;
boolean sex;
public Vip(){};
public Vip(int id,String name){
this.id = id;
this.name = name;
}
public Vip(int id,String name,String birth){
this.id = id;
this.name = name;
this.birth = birth;
}
public Vip(int id,String name,String birth,boolean sex){
this.id = id;
this.name = name;
this.birth = birth;
this.sex = sex;
}
}
2.测试类:
public class ConstructorTest{
public static void main(String[] args){
Vip v1 = new Vip();
System.out.println(v1.id);//0
System.out.println(v1.name);//null
System.out.println(v1.birth);//null
System.out.println(v1.sex);//false
System.out.println("===========================");
Vip v2 = new Vip(222,"张三");
System.out.println(v2.id);//222
System.out.println(v2.name);//"张三"
System.out.println(v2.birth);//null
System.out.println(v2.sex);//false
System.out.println("===========================");
Vip v3 = new Vip(333,"李四","2020");
System.out.println(v3.id);//333
System.out.println(v3.name);//"李四"
System.out.println(v3.birth);"2020"
System.out.println(v3.sex);//false
System.out.println("===========================");
Vip v4 = new Vip(444,"王五","2021",false);
System.out.println(v4.id);//444
System.out.println(v4.name);//"王五"
System.out.println(v4.birth);//2021
System.out.println(v4.sex);//false
}
}
综上可以看出,构造方法可以对实例变量初始化,没有手动赋值的会自动赋系统默认值。
思考:
-
构造方法有什么用?
-
构造方法怎么定义?语法是什么?
-
构造方法怎么调用?使用哪个运算符?
-
什么是缺省构造器?
-
怎么防止缺省构造器丢失?
-
实例变量是在类加载的时候初始化的吗?实例变量在什么时候初始化?