spring - java中关键字this的用法
天蓬老师
天蓬老师 2017-04-18 09:55:24
[Java讨论组]

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();
    }
}
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(6)
黄舟
  1. 内部类需要引用外部类的实例对象

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

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

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

PHP中文网

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

ringa_lee

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

天蓬老师

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

天蓬老师

只要没有歧义就可以不用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; // 正确
    });
}
巴扎黑

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号