以一个蠢货的眼光来理解Java中this和super到底是什么~!

在学习Java的过程中,this和super两个关键字总是很难理解。这里我来谈谈我的理解。

this

  • 指当前类的对象(避开Java的就近原则)

  • 调用当前类的构造方法

    调用当前类的构造方法很好理解。this();

    还有最普遍的情况就是,在你的方法中的某个形参名与当前对象的某个成员有相同的名字,这时为了不至于混淆,避开Java的就近原则,你便需要明确使用this关键字来指明你要使用某 个成员,使用方法是“this.成员名”,而不带this的那个便是形参。

另外,还可以用“this.方法名”来引用当前对象的某个方法,但这时this 就不是必须的了,你可以直接用方法名来访问那个方法,编译器会知道你要调用的是那一个。

但是指当前类的对象这就不好理解了。我如果创建了很多对象,那这个this到底指哪一个对象呢?还是它本身就是一个新的对象。原来的时候一直以为是一个新的对象。但是这样它是何时创建的呢?我创建的很多对象去调用相关方法的时候,都是this.method()。那么我创建的对象有啥作用呢?后来和朋友讨论的时候,才明白,this不是一个对象,它类似于一个变量名。当我创建对象的去调用相关方法的时候,那个对象去调用,那就把对象的内存地址赋给this。此时this也就代指那个对象。
但是又遇到了一个难题:

public class MyApplication extends Application {
    public static MyApplication instance;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }

    void printHello() {
        Log.i("mingYue", "Hello~!");
    }
}

这时我使用MyApplication.instance.printHello()的时候岂不是陷入了死循环。但是却能正常运行~!求高手解惑。已被老白解惑。
上面代码this就是MyApplication类的一个实例。因为``onCreate()这个方法都是这个实例来调用的。只是这个实例创建的过程我们没有看见而已。把上面的MyApplication`类换成一个普通类就好理解了。

class A {
    public static A instance;
    
    void onCreate() {
        instance = this;
    }
}

这们这时来直接使用A.instance.onCreate()方法就会出错了。因为这是instancenull。只有先new一个A对象,调用onCreate()方法之后,在这样使用就没问题了。而在上面的情况中,在一个应用开启时,就会创建一个MyApplication对象,onCreate()方法也会执行。所以this也就是指的这个对象。

super

  • 代指父类对象
  • 调用父类构造方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容