纸上得来终觉浅
笔记下Java访问权限的问题:
1.首先是四种情况: Public ,不加修饰符,Protected,Private;
2.下面是修饰的对象:
1)修饰类名: 只能是Public和“不加修饰符”,Protected和Private,类要么被本包访问,要么被其他包访问, 不然就没有意义。(有一种例外情况,修饰内部类,以后讲到)
2)根据上篇文章,一个类最多可以由一下几个部分构成:
A.静态成员变量
B.非静态成员变量
C.静态代码块
D.构造代码块
E.构造函数
F.静态方法
G.非静态方法
其中除了C和D,其他都是可以由上面的四种修饰符修饰。四种修饰符的作用如下图:
3)当构造函数的修饰符是Protected的时候,表示希望生成子类的对象; 当修饰符是Private的时候,可用于单例模式,即对象的初始化操作放在类中,如:
public class Test1 { private Test1 test1 = null; private Test1(){ } public Test1 getTest1(){ if(test1 == null) test1 = new Test1(); return test1; } }3.Static初始化仅发生一次——在对象首次载入的时候
4.上一篇文章讲述了类的初始化顺序,侧重点是在内存的分布,有些初始化时的详细顺序没有理清楚:下面是初始化的详细步骤:
对象的初始化:
1)首先初始化类,即执行Static (包括Static成员变量,Static代码块,顺序与书写顺序相同),加载到内存。
2)然后初始化对象(包括非Static成员变量,构造代码块,顺序与书写顺序相同)
3)构造函数
4)最后其中还有静态方法和非静态方法,不存在初始化这个概念,使用即可。 在1)就已经加载到内存了。
如果有父类的话,步骤如下:
1)首先初始化父类,即执行Static (包括Static成员变量,Static代码块,顺序与书写顺序相同),然后子类,加载到内存。
2)然后初始化父类对象(包括非Static成员变量,构造代码块,顺序与书写顺序相同)
3)父类构造函数
4)然后初始化子类对象(包括非Static成员变量,构造代码块,顺序与书写顺序相同)
5)子类构造函数
6)最后其中还有静态方法和非静态方法,不存在初始化这个概念,使用即可。