静态代码块 1. 静态代码块 (1).格式: static {
执行语句; }
(2).特点:随着类的加载而执行,只执行一次,并优先于主函数执行 用于给类进行初始化 实例:
class StaticCode { static {
System.out.print(\" a \"); } }
class StaticCodeDemo { static {
System.out.print(\" b \"); //随着类的加载,static代码块先于主函数执行 }
public static void main(String[] args) {
new StaticCode(); //static代码块只执行一次 new StaticCode(); System.out.print(\" over \"); } static {
System.out.print(\" c \"); //随着类的加载,static代码块先于主函数执行 } }
//运行结果: b c a over
2. 一个对象初始化的流程: (1).将相应的class文件加载进内存
(2).执行类中的static代码块对类进行初始化 (3).在堆内存中开辟一块空间,并分配内存地址
(4).在堆内存中建立对象的特有属性,并进行默认初始化 (5).对属性进行显示初始化 (6).对对象进行构造代码块初始化 (7).对对象进行对应的构造函数初始化 (8).将内存地址赋给栈内存中的变量
单例设计模式
1.设计模式:解决某一类问题最行之有效的方法 (1).java中有23种设计模式
(2).单例设计模式:解决一个类在内存中只存在一个对象 (3).步骤:
·将构造函数私有化
·在类中创建一个私有并静态的本类对象 ·仅对外提供一个获取该对象的方法 (4).实例:
class Single {
private int num;
public void setNum(int num) {
this.num = num; }
public int getNum() {
return num; }
private Single(){} //私有化构造函数
private static Single s = new Single(); //创建本类对象 public static Single getInstance() //对外提供获取方法 {
return s; } }
class SingleDemo {
public static void main(String[] args) {
Single s1 = Single.getInstance(); //只能有类名访问,而不能再建立新对象 Single s2 = Single.getInstance(); //s1和s2指向同一个对象 s1.setNum(30);
System.out.println(\"s2 = \"+s2.getNum()); } }
运行结果:s2 = 30
(5).懒汉式和饿汉式
·饿汉式--先初始化对象(建议使用) class Single {
private Single(){}
private static final Single s = new Single(); // final 可以不写 public static Single getInstance() {
return s; } }
·懒汉式--对象调用时才初始化(对象的延时加载) class Single2 {
private Single(){}
private static Single2 s = null; public static Single2 getInstance() {
if (s == null) {
synchronized (Single.class) {
if (s == null)
s = new Single2(); } } return s; } }
因篇幅问题不能全部显示,请点此查看更多更全内容