袁艺

个人站

欢迎来到我的个人站~


构造方法和this

介绍

定义:在创建对象时需要执行的方法。

格式:

修饰符 构造方法名(参数列表)
{
}

体现:

  • 构造方法没有返回值类型。也不需要写返回值。因为它是为创建对象的,对象创建完方法就执行结束
  • 构造方法名称必须和类名称保持一致
  • 构造方法没有具体的返回值

默认构造方法

每个类会有默认无参的构造方法

  • 一个类中可以有多个构造方法,多个构造方法是以重载的形式存在的
  • 构造方法可以被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);
	}
}

1

图例说明:

  1. 先执行main方法,main方法压栈,执行其中的new person(“张三”,23)
  2. 堆内存中开辟空间,并为其分配内存地址0x33,紧接着成员变量默认初始化(name=null,age=0)
  3. 拥有两个参数的构造方法压栈,在这个构造方法中有一个隐式的this,因为构造方法是给对象初始化的,哪个对象调用到这个构造方法,this就指向堆中的那个对象。
  4. 由于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)构造方法弹栈。
  5. 程序继续执行构造方法(Person(String nm , int a)中的age = a;这时会将23赋值给成员属性age。赋值结束构造方法(Person(String nm , int a)弹栈。
  6. 当构造方法(Person(String nm , int a)弹栈结束后,Person对象在内存中创建完成,并将0x33赋值给main方法中的p引用变量。

注意:

this代表了什么?this代表的是对象,哪个对象调用了this所在的方法,this就代表哪个对象。

super和this不能同时在构造方法中存在

成员变量和局部变量同名的问题

可以在成员变量名前面加上this.来区别成员变量和局部变量