200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > java this调用构造方法_java this关键字调用构造方法

java this调用构造方法_java this关键字调用构造方法

时间:2024-01-20 09:03:27

相关推荐

java this调用构造方法_java this关键字调用构造方法

一 this调用构造方法

构造方法之间的调用,可以通过this关键字来完成。

格式:

this(参数列表);

构造方法的调用举例:

classPerson {//Person的成员属性

private intage;privateString name;//无参数的构造方法

Person() {

}//给姓名初始化的构造方法

Person(String nm) {

name=nm;

}//给姓名和年龄初始化的构造方法

Person(String nm, inta) {//由于已经存在给姓名进行初始化的构造方法 name = nm;因此只需要调用即可//调用其他构造方法,需要通过this关键字来调用

this(nm);//给年龄初始化

age =a;

}

}

二 this的原理图解

例如:

classPerson {private intage;privateString name;

Person() {

}

Person(String nm) {

name=nm;

}

Person(String nm,inta) {this(nm);

age=a;

}

}classPersonDemo {public static voidmain(String[] args) {

Person p= new Person("张三", 23);

}

}

内存图解:

1、先执行main方法,main方法压栈,执行其中的new Person(“张三”,23);

2、堆内存中开辟空间,并为其分配内存地址0x33,,紧接着成员变量默认初始化(name=null age = 0);

3、拥有两个参数的构造方法(Person(String nm , int a))压栈,在这个构造方法中有一个隐式的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.来区别成员变量和局部变量

例如:

classPerson {private intage;privateString name;//给姓名和年龄初始化的构造方法

Person(String name, intage) {//当需要访问成员变量是,只需要在成员变量前面加上this.即可

this.name =name;this.age =age;

}public voidspeak() {

System.out.println("name=" + this.name + ",age=" + this.age);

}

}classPersonDemo {public static voidmain(String[] args) {

Person p= new Person("张三", 23);

p.speak();

}

}

四 this的应用

例如:在Person类中定义功能,判断两个人是否是同龄人

classPerson {private intage;privateString name;//给姓名和年龄初始化的构造方法

Person(String name, intage) {//当需要访问成员变量是,只需要在成员变量前面加上this.即可

this.name =name;this.age =age;

}public voidspeak() {

System.out.println("name=" + this.name + ",age=" + this.age);

}//判断是否为同龄人

public booleanequalsAge(Person p) {//使用当前调用该equalsAge方法对象的age和传递进来p的age进行比较//由于无法确定具体是哪一个对象调用equalsAge方法,这里就可以使用this来代替

/** if(this.age == p.age) { return true; } return false;*/

return this.age =p.age;

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。