温馨提示:如果觉得文字或者代码过小,请按住ctrl+鼠标滑轮滚动,调整浏览器的显示比例。
package com.zwj;
public class ThisDemo {
public static void main(String[] args) {
Person p = new Person("大神");
p.speak();
}
}
class Person{
private String name;
private int age;
Person(String name){
name = name; //初始化时的姓名参数将无法带入堆内存中的name
}
Person(String n,int a){
name = n;
age = a;
}
public void speak(){
System.out.println("name="+name+"...age="+age);
}
}
运行程序,打印出的结果为:
name=null...age=0
下面看this关键字:
package com.zwj;
/**
*this:看上去,是用于区分局部变量和成员变量同名的情况
*this为什么可以解决这个问题?
*this到底代表着什么?
*
*this:就代表本类的对象,到底代表哪一个呢?
*this代表它所在函数所属对象的引用。
*简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
*/
public class ThisDemo {
public static void main(String[] args) {
Person p = new Person("大神");
Person p2 = new Person("码农",12);
p.speak();
p2.speak();
}
}
class Person{
private String name;
private int age;
Person(String name){
this.name = name;//将局部变量name的值赋值给当前对象中的name
}
Person(String name,int age){
this.name = name;
this.age = age;
}
public void speak(){
System.out.println("name="+this.name+"...age="+this.age); //这里不加this程序运行仍然正确,因为前面对象初始化时构造函数已经取得对象的
//name和age,所以这里的name和age就代表对象的name和age,但是为了表达更加清晰,最好也在前面加上this
this.show(); //这里的this通常省略,对象只有一个show()方法,可以省略
}
public void show(){
System.out.println(this.name+"wo");
}
}
this关键字应用:
package com.zwj;
/**
*需求:给人定义一个用于比较年龄是否相同的功能。也就是是否是同龄人。
*
*this的应用:当定义类中功能(函数)时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
*但凡本类功能内部使用了本类对象,都用this表示。
*/
public class ThisDemo {
public static void main(String[] args) {
Person p1 = new Person(20);
Person p2 = new Person(25);
boolean b = p1.compare(p2);
System.out.println(b);
}
}
class Person{
private String name;
private int age;
Person(String name){
this.name = name;
}
Person(int age){
this.age = age;
}
Person(String name,int age){
this.name = name;
this.age = age;
}
public void speak(){
System.out.println("name="+this.name+"...age="+this.age);
this.show();
}
public void show(){
System.out.println(this.name);
}
public boolean compare(Person p){
return this.age == p.age;
}
}
this语句与构造函数:
package com.zwj;
/**
* this语句:用于构造函数之间进行互相调用。
* 构造函数间定义,只能用this语句。
* this语句只能定义在构造函数的第一行,因为初始化的动作要先执行。
*/
public class ThisDemo {
public static void main(String[] args) {
}
}
class Person{
private String name;
private int age;
Person(String name){
this.name = name;
}
Person(String name,int age){
this(name); //类似于Person(name);调用无参构造函数,但是不能写Person(name),
//用this表示对当前对象调用无参构造函数进行无参初始化
this.age = age;
}
}