Java 中的 this 关键字

yufei       6 年, 1 月 前       658

Java 语言中,this 关键字是一个对象 ( 类的实例 ) 内部对当前对象的引用。

本章节,我们来看看 Java 中的 this 关键字的几个使用场景。

使用 this 关键字来引用当前类的当前的实例变量

JavaTester.java

public class JavaTester 
{ 
    int a; 
    int b; 

    // 构造方法
    JavaTester(int a, int b) 
    { 
        this.a = a; 
        this.b = b; 
    } 

    void display() 
    { 
        //显示当前实例变量 a 和 b
        System.out.println("a = " + a + "  b = " + b); 
    } 

    public static void main(String[] args) 
    { 
        JavaTester object = new JavaTester(10, 20); 
        object.display(); 
    } 
} 

编译运行以上范例,输出结果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
a = 10  b = 20

上面这段代码中, JavaTester 类中的 this 关键字就是指向 JavaTester 类的实例。

使用 this() 来调用当前类的构造方法

public class JavaTester 
{ 
    int a; 
    int b; 

    // 默认的构造方法 
    JavaTester() 
    {   
        this(10, 20); 
        System.out.println("Inside  default constructor \n"); 
    } 

    // 带参数的构造方法 
    JavaTester(int a, int b) 
    { 
        this.a = a; 
        this.b = b; 
        System.out.println("Inside parameterized constructor"); 
    } 

    public static void main(String[] args) 
    { 
        JavaTester object = new JavaTester(); 
    } 
} 

编译运行以上代码,输出结果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
Inside parameterized constructor
Inside  default constructor

上面这段代码中,this() 方法就是对 JavaTester() 方法的引用,而 this(10,20) 就是对 JavaTester(int a, int b) 方法的引用。

可以使用 return this; 语句来返回当前类的当前实例

public class JavaTester 
{ 
    int a; 
    int b; 

    // 默认的构造方法 
    JavaTester() 
    { 
        a = 10; 
        b = 20; 
    } 

    // 返回当前实例 
    JavaTester get() 
    { 
        return this; 
    } 

    // 显示当前实例变量 a 和 b
    void display() 
    { 
        System.out.println("a = " + a + "  b = " + b); 
    } 


    public static void main(String[] args) 
    { 
        JavaTester object = new JavaTester(); 
        object.get().display();
    } 
} 

编译运行以上代码,输出结果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
a = 10  b = 20

使用 this 作为参数调用方法

在调用方法时可以通过传递 this 关键字来传递当前实例对象

public class JavaTester 
{ 
    int a; 
    int b; 

    // 默认的构造方法 
    JavaTester() 
    { 
        a = 10; 
        b = 20; 
    } 


    // 可以接受 this 关键字作为参数的方法
    void display(JavaTester obj) 
    { 
        System.out.println("a = " + a + "  b = " + b); 
    } 

    // 返回当前实例的方法 
    void get() 
    { 
        display(this); 
    } 


    public static void main(String[] args) 
    { 
        JavaTester object = new JavaTester(); 
        object.get();
    } 
} 

编译运行以上代码,输出结果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
a = 10  b = 20

使用 this 关键字调用当前的实例方法

public class JavaTester 
{ 
    int a; 
    int b; 

    // 默认的构造方法 
    JavaTester() 
    { 
        a = 10; 
        b = 20; 
    } 


    void display() 
    { 
        // 调用 show() 方法 
        this.show(); 

       System.out.println("Inside display function"); 
    } 

    void show() { 
        System.out.println("Inside show funcion"); 
    } 


    public static void main(String[] args) 
    { 
        JavaTester object = new JavaTester(); 
        object.display();
    } 
} 

编译运行以上代码,输出结果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
Inside show funcion
Inside display function

从某些方面说,this 关键字其实是多余的。

使用 this 关键字作为构造方法的参数

public class JavaTester 
{ 
    int a; 
    int b; 

    // 默认的构造方法 
    JavaTester() 
    { 
        a = 10; 
        b = 20; 

        A a = new A(this);
    } 


    void display() 
    { 
        System.out.println("a = " + a + "  b = " + b);  
    }

    public static void main(String[] args) 
    { 
        JavaTester tester = new JavaTester(); 
    } 
}


class A 
{ 
    JavaTester obj; 

    // 使用 JavaTester 类的对象作为构造函数的参数
    A(JavaTester obj) 
    { 
        this.obj = obj; 

     // 调用 JavaTester.display() 
        obj.display(); 
    } 

} 

编译运行以上代码,输出结果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
a = 10  b = 20
目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.