黑马程序员-this关键字

时间:2022-05-31 00:43:57

 this:代表所在函数所属对象的引用,简单来说哪个对象在调用this所在的函数,this就代表哪个对象。


 this应用:

1、用于区*部变量和成员变量同名情况。

2、当定义类中功能时,该函数内部要用到调用该函数的对象时
      这时用this来表示这个对象。
  
当不加this关键字且成员变量和局部变量同名时,则在调用函数传参数时,局部变量会屏蔽成员变量:


 class Person
{
private String name;
private int age;
Person(String name,int age)
{
name = name;//局部变量屏蔽了成员变量,未能给成员变量name赋值
age = age;
}
public void show()
{
System.out.println("name="+name+";age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person("lisi",20);
p.show();
}
}

  输出结果:

name=null;age=0

class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;//p对象在调用,所以this指向堆内存中的P对象
this.age = age;
}
public void show()
{
System.out.println("name="+name+";age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person("lisi",20);
p.show();
}
}

  输出结果:

name=lisi;age=20


当定义类中的功能,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。

<pre name="code" class="java">class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean compare(Person p)
{
return this.age == p.age;//this指调用该函数的对象
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p1 = new Person("lisi01",30);
Person p2 = new Person("lisi02",21);
System.out.println(p1.compare(p2));
}
}


 

  this在构造函数间的调用:
class Person
{
private String name;
private int age;
Person(String name)
{
this.name = name;
}
Person(String name,int age)
{
this(name);//等同于于p(name);
this.age=age;
}
public void show()
{
System.out.println("name="+name+";age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person("lisi",20);
p.show();
}
}

  注意:

1、可以通过this();参数的不同来指定调用哪个构造函数。

2、this语句必须在函数的第一行!确保当初始化操作中还有初始化时,先执行初始化中的初始化操作。

3、this语句不能用在一般函数中,只能在构造函数里使用。