image.png
    静态代码块属于类,随着类加载,执行一次(用的多)

    1. package com.itheima.d3_static_code;
    2. public class StaticDemo1 {
    3. public static String schoolName;
    4. /**
    5. * 静态代码块: 有static修饰,属于类,与类一起优先加载一次,自动触发
    6. * 无论static代码块,在main方法上面或者下面,都是先执行static代码块,因为static是属于类,与类一起加载
    7. * 静态代码块作用:可以用于初始化静态资源(给静态成员初始化值)
    8. */
    9. static { // Java是先加载类,然后执行main方法
    10. System.out.println("===============静态代码块被触发执行了========================");
    11. // 在static代码块中给初始化值
    12. schoolName = "黑马";
    13. }
    14. public static void main(String[] args) {
    15. // 目标: 先理解静态代码块
    16. System.out.println("============main方法执行===============");
    17. System.out.println(schoolName);
    18. }
    19. static { // Java是先加载类,然后执行main方法
    20. System.out.println("===============静态代码块第二次被触发执行了========================");
    21. }
    22. }

    实例代码块属于对象,基本不用,每次创建对象都会执行一次实例代码块

    package com.itheima.d3_static_code;
    
    public class StaticDemo2 {
        public StaticDemo2(){ // 本身是有无参构造器的,但是可以可以定义无参构造器的方法,来验证无参构造器是否被调用
            System.out.println("================无参构造器被触发执行============="); // 一调用new StaticDemo2();无参构造器,就会执行下面的代码
        }
    
        // 定义一个实例成员 (可以理解为实例资源)
        private String name; //
    
        /**实例代码块也叫构造代码块,属于对象  实例代码块不属于类,不会和类一起跑
         * 实例代码块:无static修饰,属于对象,每次构建对象时:都会触发一次执行
         * 格式{}
         * 在实例代码块中初始化实例资源
         */
        {  // 实例代码块几乎不用
            System.out.println("==========实例代码块被触发执行==========="); // 每次构造对象才被执行
    //        name = "张三"; // 这里等于是写死了,每次创建的对象的name都叫张三
        }
    
        public static void main(String[] args) {
            // 目标:理解实例代码块(构造代码块)
            StaticDemo2 s1 = new StaticDemo2(); // 调用了无参构造器创建对象,会先输出实例代码块,然后再执行无参构造器,因为实例代码块在创建对象时就被调用了
            System.out.println(s1.name);
    
            StaticDemo2 s2 = new StaticDemo2();
            System.out.println(s2.name); // 都叫张三了,就等于写死了,意义不打,所以实例代码块基本不用
        }
    }