介绍
定义:在创建对象时需要执行的方法。
格式:
修饰符 构造方法名(参数列表)
{
}
体现:
- 构造方法没有返回值类型。也不需要写返回值。因为它是为创建对象的,对象创建完方法就执行结束
- 构造方法名称必须和类名称保持一致
- 构造方法没有具体的返回值
默认构造方法
每个类会有默认无参的构造方法
- 一个类中可以有多个构造方法,多个构造方法是以重载的形式存在的
- 构造方法可以被private修饰,但其他程序就无法创建该类的对象
构造方法和一般方法的区别
构造方法是在对象创建时就执行了,而且只执行一次;一般方法是在对象创建之后,需要使用时才被对象调用,并且可以被多次调用。
有了构造方法之后可以对对象的属性进行初始化,那么还需要对应的set和get方法吗?需要相应的set和get方法,因为对象在创建之后需要修改和访问相应的属性值时,在这时只能通过set或者get方法来操作。
this关键字
this调用构造方法
调用构造方法,无法通过构造方法名互相调用。构造方法之间的调用,可以通过this关键字来完成。
调用格式:this(参数列表)
this的原理图解
class Person {
private int age;
private String name;
Person() {
}
Person(String nm) {
name = nm;
}
Person(String nm, int a) {
this(nm);
age = a;
}
}
class PersonDemo {
public static void main(String[] args) {
Person p = new Person("张三", 23);
}
}
图例说明:
- 先执行main方法,main方法压栈,执行其中的new person(“张三”,23)
- 堆内存中开辟空间,并为其分配内存地址0x33,紧接着成员变量默认初始化(name=null,age=0)
- 拥有两个参数的构造方法压栈,在这个构造方法中有一个隐式的this,因为构造方法是给对象初始化的,哪个对象调用到这个构造方法,this就指向堆中的那个对象。
- 由于Person(String nm , int a)构造方法中使用了this(nm);构造方法Person(String nm)就会压栈,并将“张三”传递给nm。在Person(String nm , int a)构造方法中同样也有隐式的this,this的值同样也为0x33,这时会执行其中name = nm,即把“张三”赋值给成员的name。当赋值结束后Person(String nm , int a)构造方法弹栈。
- 程序继续执行构造方法(Person(String nm , int a)中的age = a;这时会将23赋值给成员属性age。赋值结束构造方法(Person(String nm , int a)弹栈。
- 当构造方法(Person(String nm , int a)弹栈结束后,Person对象在内存中创建完成,并将0x33赋值给main方法中的p引用变量。
注意:
this代表了什么?this代表的是对象,哪个对象调用了this所在的方法,this就代表哪个对象。
super和this不能同时在构造方法中存在
成员变量和局部变量同名的问题
可以在成员变量名前面加上this.来区别成员变量和局部变量