abstract和final两个几乎随处可用的就不说了。
最外部的类只能有public\default。
public和.java文件名一致。显然只能有一个。
default在同包内可访问。protected则附加包外子类也可。
在最外部的类当中,可以倒腾这些东西
内部类:public, protected, default, private。
相互之间随便访问private。实际上,好像这几个访问修饰符用在这里没什么差别,是不是java设计上的不完备?
内部类不能被其他类实例化。
初始化、静态初始化块:default。
可以访问任何内部类private,而自己不能被任何内部类访问,即内部类不知道块中类的存在。
所以块中类实际上是一种局部内部类,离开{}即不可见。
但是当然块中如果定义了多个class,相互可以随意访问private。
{}和static{}之间自然也是不可见的。
另外可以注意一下块中类javac出来的.class,是$1和$2修饰的,而且不是1和2这样跟它们对应的,而是同名冲突了才会用2。
执行顺序:
父类static{},子类static{},父类{},父类构造函数,子类{},子类构造函数
四种内部类:
常规内部类,静态内部类,局部内部类,匿名内部类。
匿名内部类不能是abstract或static
局部内部类不能是static
常规内部类内部不能再定义static类、static{}