静态加载顺序 - 代码实现

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

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("内部类静态函数代码块");
        }
    }
}

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,829评论 0 10
  • 前言 看大神推荐的书单中入门有这么一本书,所以决定把这本书的精华(自认为很有用的点),或许是我自己现在能用到的点都...
    我没有三颗心脏阅读 2,244评论 0 6
  • 希望是什么?希望意味着我们将要走向的未来。 希望是什么?希望是黑暗中那一束束光亮,是我们寻找的光明。 希望是什么?...
    任亚阅读 172评论 0 0
  • 我叫刘雅洁,是一名90后乡村教师,来自康保县二号卜乡中心小学。自2014年参加工作以来,我一直在认真对待学...
    康保100刘雅洁阅读 178评论 0 0