内部类

延伸:为何外部类不能为静态?

 

作者:anderson93
链接:https://www.zhihu.com/question/29924680/answer/121013967
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
 
 
static修饰内部函数和类,已经起到全局函数的作用了.

静态变量与静态方法:数据存放的位置与普通变量方法不同;存放在class文件中指的是你程序运行之前就已经存进去数据了;
普通变量与普通方法:程序运行后才生成堆栈中;

所以时间都不平衡的两类数据是不能已经要存的调用未来的数据(静态调用非静态);理解这个时间顺序一系列问题也就可以解决了;

再理解静态内部类与非静态内部类(咱不背规则咱要弄懂实际从而衍生规则)。

非静态的内部类:依赖于外部类的实例(因为由于有实例非静态数据才生成所以必须依赖),故可以使用外部类任何数据,弊端:但是就算外部类没用了也不GC掉,他还被内部类占有所以一般容易造成内存泄漏;
静态内部类:不依赖于外部,本意(个人理解)相当于重新建立的一个新类,所以不能引用外部非静态成员,想想可知,不依赖外部却要使用外部还没有生成的数据肯定不行。(挺绕的多读几遍顺顺)

扯了如此多 再扯扯为何要JAVA弄如此麻烦有内部类!!
因为继承:如果一个类只能继承一个!那我加个内部类不就继承两个拉!我想这是JAVA设计者原本的心态但是又发现一系列问题不能处理所以又引入接口,(所以一般现在内部类都是你写代码时候图快捷的方法不是其他什么原因;我是没想到能使用内部类的时候为何不可重新创一个新类,使用新类的时候不怕代码逻辑看起来杂也能放一个文件里面当内部类处理。(个人理解:就是要敢于个人理解!)


静态内部类归根结底就是一个新的类一个顶级类!内部类使用static 是为了区别于非static内部类 为了不混淆使用。外部类只有一个管你成千上万内部类。老子外部类只有一个!。所以设计者强限制static不能修饰外部类 也是为了防止产生区别搞混淆,这就只是JAVA设计者定的规则,


如果java设计之初就限制外部类名前必须有static, 对JAVA没有一点影响。只是每次写新类多写了个单词。

 

posted @ 2017-03-02 11:00  Rainyn  阅读(150)  评论(0编辑  收藏  举报