静态加载顺序 - 代码实现

最近在学习单例模式的时候看到了使用静态内部类的方法来实现懒加载,当时对静态的加载顺序还是有点云里雾里,写下一串代码来实践一个类静态的加载顺序

class ConDemo
{
    public static void main(String[] args)
    {
        cons.test();
        System.out.println("---------");
        cons c1 = new cons();
        System.out.println("---------");
        cons c2 = new cons();
        System.out.println("---------");
        cons.sc.hehe();
        System.out.println("---------");
        cons.c;

    }
}
class cons
{
    public static cons c = new cons();  // 静态变量
    public cons()    //是给对应的对象进行针对性的初始化
    {
        System.out.println("构造函数代码块");
    }
    
    static
    {
        System.out.println("静态函数代码块");
    }
    
    {    //构造代码块,可以给所有的对象进行初始化
        System.out.println("函数代码块");
    }
    
    public static void test()
    {
        System.out.println("静态方法代码块");
    }
    static class sc{        // 静态内部类
        public static void hehe(){
            System.out.println("内部类静态函数代码块");
        }
    }
}

静态函数代码块
函数代码块
构造函数代码块
静态方法代码块
---------
函数代码块
构造函数代码块
---------
函数代码块
构造函数代码块
---------
内部类静态函数代码块

从这里我们发现,静态内部类的实现并不依赖于外部类,加载内部类的时候不会加载外部类,静态函数代码块会优先于其他代码块优先加载,并且只会加载一次,并且静态方法在我们不去调用的时候并不会加载。

你可能感兴趣的:(静态加载顺序 - 代码实现)