我的2017追梦之旅Android知识iOS学习

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

2017-02-27  本文已影响65人  甜甜的清风啊

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

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

上一篇下一篇

猜你喜欢

热点阅读