二、一个类在什么时候被加载?时机 (延迟加载,能不加载就不加载) (1)new 一个对象的时候,加载 (2)没有创建对象,访问类中静态成员(方法和属性),加载 (3)声明一个类的引用,不加载 (4)创建子类,先加载父类,再加载子类 (5)父类中的公开静态方法,子类继承,使用子类的类名调用此方法,加载父类 class Super{ public static m(){} } class Sub extends Super{} 在主函数中运行以下代码: Sub.m(); //加载了父类之后,虚拟机已经知道m()方法的调用了,就不会再加载子类,延迟加载 (6)没有创建对象,访问类中静态常量(能计算出结果的常量,在编译的时候会用计算出来的结果替换表达式),不加载 没有创建对象,访问类中静态常量(不确定的值),加载 (7)CoreJava day16
三、设计模式(编程套路) GOF(Group Of Four)四人帮模式 23种
1、单例模式 Singleton:
class A{ private static A a = new A(); //私有静态的实例变量指向自己,在类加载时创建唯一对象 public static A newInstance(){ //提供公开静态的访问点,回返唯一实例 return a; } private A(){} //私有的构造方法,防止滥用 }
注意:final,不能用来修饰构造方法。 在父类中如果有常量属性,在子类中使用常量属性时是不会进行父类的类加载。 静态常量如果其值可以确定,就不会加载该类,如果不能确定则会加载该常量所在的类。 class Super{ private final void m(){} //用final可以证明出private的方法不继承给子类 } class Sub extends Super{ public void m(){} //不是方法的覆盖 }