美文网首页我的2017追梦之旅Android知识iOS学习
以一个蠢货的眼光来理解Java中this和super到底是什么~

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

作者: 甜甜的清风啊 | 来源:发表于2017-02-27 10:21 被阅读65次

在学习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

  • 代指父类对象
  • 调用父类构造方法

相关文章

网友评论

    本文标题:以一个蠢货的眼光来理解Java中this和super到底是什么~

    本文链接:https://www.haomeiwen.com/subject/mdxzwttx.html