[知其然欲知其所以然]static

2019-08-03  本文已影响0人  yogoshary

牛客一题:找出写法错误的一项

A:    class x { .... }

B:    class x extends y { .... }

C:    static class x implements y1,y2 { .... }

D:    public class x extends Applet { .... }

答案为c,因为static不可以用来修饰外部类。

那么static为什么可以修饰内部类,却不可以修饰外部类?

static修饰的为类成员,会随着类的加载而加载,比如静态代码块,静态成员,静态方法(这里只是加载,并没有调用)等等,可以想象一下,如果把一个Class文件中的外部类设为static,目的难道是让这个类随着应用的启动而加载吗?如果在这次使用过程中根本没有使用过这个类,那么是不是就会浪费内存。这样来说设计不合理,总而言之,设计不合理的地方,Java是不会让它存在的。

而为什么内部类可以使用static修饰呢,因为内部类算是类的成员了,如果没有使用静态来修饰,那么在创建内部类的时候就需要先有一个外部类的对象,如果我们一直在使用内部类,那么内存中就会一直存在外部类的引用,而我们有时候只需要使用内部类,不需要外部类,那么还是会浪费内存,甚至会造成内存溢出。使用static修饰内部类之后,内部类在创建对象时就不需要有外部类对象的引用了。

最终结论就是:static可以用来修饰内部类,但是不可以用来修饰外部类

上一篇下一篇

猜你喜欢

热点阅读