对静态代码块执行时机的认识

  • 类的生命周期包括加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸载(Unloading)等七个阶段,其中验证、准备和解析三个部分统称为连接(Linking)。而类的加载指的就是从加载到初始化这五个阶段。

  • 初始化的时候会包含静态代码块的执行和静态变量的赋值

  • 初始化在装载时不是必须触发的,保证在初次主动使用对象前会触发。

  • 例:

    class A{
        static{
            System.out.print("1");
        }
        
        public A(){
            System.out.print("2");
        }
    }
    
    class B extends A{
        static{
            System.out.print("a");
        }
        
        public B(){
            System.out.print("b");
        }
    }
    
    
    public class Hello {
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        A ab = new B();
        ab = new B();
    }
    
    }

输出结果: 1a2b2b

静态代码块和非静态代码块的区别

  • 静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次;

  • 非静态代码块,在创建对象的时候(即new一个对象的时候)执行,每次创建对象都会执行一次


SportCloud
157 声望9 粉丝

数据仓库