首页 > 代码库 > JAVA中的this关键字

JAVA中的this关键字

this是JAVA中一个非常重要的关键字。

 

用法一:

为了了解this的用法,先看以下代码

package javastudy;

public class ThisDemo2 {

    public static void main(String[] args) {
        Person1 l=new Person1(11,"lisi");
        l.speak();
    }
}

class Person1
{
    int age;
    String name;
    Person1(int a,String b){        //形参a,b,可读形很差,因为a和b代表什么意思,从字面上来不容易理解。
        age=a;
        name=b;
    }
    void speak(){
        System.out.println("My name is "+name+",my age is "+age);
    }    
}

输出结果:My name is lisi,my age is 11

以上代码,虽然语法上没有任何问题,但是在可读性上存在问题。定义Person1类时,形参a、b的字面意思不得而知,需要结合上下文代码才能理解,降低代码的可读性。

 

改造以上代码,如下:

package javastudy;

public class ThisDemo2 {

    public static void main(String[] args) {
        Person1 l=new Person1(11,"lisi");
        l.speak();
    }
}

class Person1
{
    int age;
    String name;
    Person1(int age,String name){        //形参改为age和name
        age=age;    //
        name=name;     //
    }
    void speak(){
        System.out.println("My name is "+name+",my age is "+age);
    }    
}    

输出结果:My name is null,my age is 0

 

在实例化对象时,给age和name进行了传值,但是对象在堆中的age、name却未接收到传值。原因就在于age=age,name=name这两句代码中。

局部变量的名称与成员变量名称相同,JVM是无法进行区分的。

为了区分局部变量与成员变量,将成员变量的值传递给对象,就要用到this关键字。

如下

package javastudy;

public class ThisDemo2 {

    public static void main(String[] args) {
        Person1 l=new Person1(11,"lisi");
        l.speak();
    }
}

class Person1
{
    int age;
    String name;
    Person1(int age,String name){        //
        this.age=age;    //
        this.name=name;    //
    }
    void speak(){
        System.out.println("My name is "+name+",my age is "+age);
    }    
}

this关键字代表本类的对象, 即哪个对象在调用this所在函数,this就代表哪个对象。

 

如Person1 l=new Person1(11,"lisi"),l在调用Person1构造函数,this就代表l;如果增加代码Person1 w=new Person1(11,"wangwu"),this就代表w。所以,只要用this关键字,就可以简化代码。

其实,当我在类中定义成员的变量和方法时,其前面都有隐含的this关键字,哪个对象调用,this就代码哪个对象。只有这个this在很多时候,都是可省略不写的。

在同一类中,成员变量和局部变量相同时,要加this。

 

用法二:

 先看以下代码:

 

package javastudy;

public class ThisDemo4 {

    public static void main(String[] args) {
        Person4 p4=new Person4(12,"SB");
        p4.speak();
    }
}

class Person4{
    int age;
    String name;
    Person4(int age) {
        this.age=age;        
    }
    public Person4(int age,String name) {
        this.age=age;    //重复
        this.name=name;
    }
    void speak(){
        System.out.println(name+"|"+age);
    }
}    

以上代码中,

Person4(int age) {
this.age=age;
}

这段代码重复写了。可在第二个构造函数中直接调用。用this语句直接调用。且this语句要写在首行。

如下

package javastudy;

public class ThisDemo4 {

    public static void main(String[] args) {
        Person4 p4=new Person4(12,"SB");
        p4.speak();
    }
}

class Person4{
    int age;
    String name;
    Person4(int age) {
        this.age=age;        
    }
    public Person4(int age,String name) {
        this(age);    //this语句,直接调用
        this.name=name;
    }
    void speak(){
        System.out.println(name+"|"+age);
    }
}

 

JAVA中的this关键字