欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java中this的用法示例(关键字this)

程序员文章站 2024-02-25 09:28:07
this是指向本身的隐含的指针,简单的说,哪个对象调用this所在的方法,那么this就是哪个对象。 示例代码: testthis_1.java 复制代码 代码如下:/...

this是指向本身的隐含的指针,简单的说,哪个对象调用this所在的方法,那么this就是哪个对象。

示例代码: testthis_1.java

复制代码 代码如下:

/* 问题:什么是this
 * 输出结果:
 * a@4e44ac6a
 */

public class testthis_1 {
    public static void main(string[] args) {
        a aa = new a();
        system.out.println(aa.f()); //aa.f(), 返回aa这个对象的引用(指针)
    }  
}

class a {
    public a f() {
        return this;  //返回调用f()方法的对象的a类对象的引用
    }  
}

this的常见用法

1. 区分同名变量

示例代码: testthis_2.java

复制代码 代码如下:

/* this的常见用法1:区分同名变量
 * 输出结果:
 * this. i = 1
 * i = 33
 */
public class testthis_2 {
    public static void main(string[] args) {
        a aa = new a(33);
    }  
}

class a {
    public int i = 1;                                           //这个i是成员变量

    /*注意:一般不这么写,构造函数主要是为了初始化,这么写主要是为了便于理解*/
    public a(int i) {                                           //这个i是局部变量
        system.out.printf("this. i = %d\n", this.i);            //this.i指的是对象本身的成员变量i
        system.out.printf("i = %d\n", i);                       //这里的i是局部变量i
    }  
}

2. 构造方法间的相互调用

示例代码: testthis_3.java

复制代码 代码如下:

/* this的常见用法2: 构造方法中互相调用*/
public class testthis_3 {
    public static void main(string[] args) {

    }  
}

class a {
    int i, j, k;
    public a(int i) {
        this.i = i;
    }  

    public a(int i, int j) {
        /* i = 3;  error   如果不注释掉就会报错:用this(...)调用构造方法的时候,只能把它放在第一句
         * testthis_3.java:20: error: call to this must be first statement in constructor
         *      this(i);
         *                  ^
         *                  1 error
         */
        this(i);   
        this.j = j;
    }  

    public a(int i, int j, int k) {
        this(i, j);
        this.k = k;
    }  
}

注意事项

被static修饰的方法没有this指针。因为被static修饰的方法是公共的,不能说属于哪个具体的对象的。

示例代码: testthis_4.java

复制代码 代码如下:

/*static方法内部没有this指针*/
public class testthis_4 {
    public static void main(string[] args) {

    }  
}

class a {
    static a f() {
        return this;
        /* 出错信息:testthis_4.java:10: error: non-static variable this cannot be referenced from a static context
         *          return this;
         *                     ^
         *                     1 error
         */
    }  
}