首页 > java中关键字this的用法

java中关键字this的用法

java中,使用this的地方,完全可以不使用this,this代表当前对象,对于当前对象的方法或者属性,个人觉得用不用this都没有多大关系,示例代码如下:

package testTHIS;

public class TestTHIS {

    int flag = 0;

    public static void main(String[] args) {
        Test test = new Test();
        test.main();

        TestTHIS tt = new TestTHIS();
        tt.say(); // 不能使用this.say();
    }

    public void say() {
        MyTest mt = new MyTest();
        mt.main();
        int i = this.flag;
        int k = flag;
    }
}

class Test {

    public void main() {
        say1();
        this.say1();
        say2();
        this.say2();
        say3();
        this.say3();
        say4();
        this.say4();
    }

    public void say1() {
        System.out.println("111111111111111");
    }

    protected void say2() {
        System.out.println("222222222222222");
    }

    void say3() {
        System.out.println("333333333333333");
    }

    private void say4() {
        System.out.println("444444444444444");
    }
}

class MyTest extends Test {

    @Override
    public void main() {
        this.say1();
    }
}

  1. 内部类需要引用外部类的实例对象

  2. 局部变量和全局变量名称重复,需要用this指定引用的是全局变量

  3. 建造者模式的return this应该也算吧

  4. 构造函数调用其它重载构造函数


this是用来解析依附于实例的符号的,比如字段名,方法名。在变量名有歧义的时候添加。
关于this的实现可以看看我的这篇博客Java方法调用,应该会对你有帮助。


还有在内部类的时候也必须用到this


你说的这些都是不应当使用this地方,但是在构造方法里调用自身其他构造方法,你能不使用this吗?


this 好像目前最常用的就是匿名类了。
其实我倒是觉得this很多情况下只是标识作用了,比如区分一下this.namesuper.name 一个是自己的,一个是父类的。仅仅是为了代码可读


只要没有歧义就可以不用this。
static方法里面不能用this,是因为static方法里面没有自己这个实例。

public class Person{
    private Object data;
    public void setData(Object data) {
        //data = data; //有歧义,错误
        this.data = data; // 正确
    }
}

或者

public class Person{
    private Object mData;
    public void setData(Object data) {
        mData = data;
    }
}

另外还有个常见的this不对的情况

public class Fuck {
    private boolean mIsNice = false;
    public void doFuck(new OnFinished(boolean isNice){
       //mIsNice = isNice; // 错误:这样应该访问不到
       //this.mIsNice = isNice; // 错误:这里this实际上指的是OnFinished这个实例
       Fuck.this.mIsNice = isNice; // 正确
    });
}
【热门文章】
【热门文章】