静态代码块&实例化代码块

静态代码块&实例化代码块

package com.company.test03;

/*
* 可以使用static关键字来定义“静态代码块”:
*   1、语法格式::
*       static{
*           java语句;
*       }
*
*   2、静态代码块在类加载时执行,在main方法之前执行,并且只执行一次。
*
*   3、静态代码块在一个类中可以编写多个,并且遵循自上而下的顺序执行。
*
*   4、静态代码块的作用?什么时候用?
*       - 这当然和具体的需求有关。例如项目中要求在类加载的时刻/时机执行代码,完成日志的记录。
*         那么这段记录日志的代码就可以编写到静态代码块中。
*       - 静态代码块是java为程序员准备的一个特殊时刻,这个特殊时刻被称为类加载时刻。若希望
*         在此时执行一段特殊的程序,这段程序就可以直接放到静态代码块当中。
*
*   5、通常在静态代码块当中完成预备工作,先完成数据的准备工具,例如:初始化连接池,解析XML配置文件...
*
*   6、实例代码块:
*       语法: {
*               java语句;
*             }
*   7、实例语句块/代码块【了解内容,使用的非常少】
*      a.实例代码块可以编写多个,也是遵循自上而下的顺序依次执行
*      b.实例代码块只有在实例化对象的时候才会执行。
*           如下运行StaticTest01.main()时输出:
*           类加载-->1
            类加载-->2
            类加载-->3
            main begin
*           并不会执行两个实例代码块;
*
*           而当运行StaticTest02.main()时输出:
            类加载-->1
            类加载-->2
            类加载-->3
            实例代码块1
            实例代码块2
            构造方法
*       c.实例化代码块在构造方法之前执行,构造方法执行时,实例代码对应执行一次。
*       d.实例代码块也是java语言为程序员准备的一个特殊时机,这个特殊时机被称为:对象初始化时机。
* */
public class StaticTest01 {
    {
        System.out.println("实例代码块1");
    }
    static{
        System.out.println("类加载-->1");
    }
    static{
        System.out.println("类加载-->2");
    }
    static{
        System.out.println("类加载-->3");
    }
    {
        System.out.println("实例代码块2");
    }

    public StaticTest01(){
        System.out.println("构造方法");
    }

    public static void main(String[] args) {
        System.out.println("main begin");
    }
}

package com.company.test03;

public class StaticTest02 {
    public static void main(String[] args) {
        StaticTest01 s = new StaticTest01();
        /*类加载-->1
          类加载-->2
          类加载-->3
          实例代码块1
          实例代码块2
          构造方法*/
    }
}

你可能感兴趣的:(Java)