文档章节

JAVA static 装载顺序

will--wang
 will--wang
发布于 2017/07/24 20:28
字数 454
阅读 9
收藏 1
/**
 * 类加载顺序:
 * 1.加载类的静态属性(非静态不管)
 * 这里加载的是:public static int k = 0;
 * 然后加载:public static StaticLoadTest t1 = new StaticLoadTest("t1");
 * 因为此处进行了类的实例化所以
 * 1.1加载类的非静态属性
 * 这里是:public int j = print("j");
 * 运行完这个方法接着
 * 1.2顺序加载类中的非static代码块(static暂时不加载)
 * 这里是:print("构造快");和print("静态块");
 * 运行完接着
 * 1.3加载类的构造方法
 * 这里是:public StaticTest(String str)
 * 运行完(一个静态属性的实例就完成了)
 * 2.继续加载类的静态属性
 * 这里加载的是:public static StaticLoadTest t2 = new StaticLoadTest("t2");
 * 2.1重复(1.1-1.3)
 * 3.继续加载类的静态属性
 * 这里加载的是:public static int i = print("i");
 * 运行完接着
 * 4.继续加载类的静态属性
 * 这里加载的是:public static int n = 99;
 * 不管你n原来是多少现在为99
 * 接着
 * 5.(如果有static代码块,在这里先加载,这个里面没有所以加载主函数)加载主函数
 * 这里加载的是:StaticLoadTest t = new StaticLoadTest("init");
 * 因为此处进行了类的实例化所以
 * 5.1
 * 重复1.1-1.3
 * 5.2
 * 因为public static int print(String str)这个方法返回++n
 * 所以n从99开始累加
 * 运行完OK了
 *
 * @Author wangwei-ww
 * @Date 2017/7/24 20:19
 * @Comment
 */
public class StaticLoadTest {
    public static int k = 0;
    public static StaticLoadTest t1 = new StaticLoadTest("t1");
    public static StaticLoadTest t2 = new StaticLoadTest("t2");
    public static int i = print("i");
    public static int n = 99;
    public int j = print("j");

    {
        print("构造快");
    }

    {
        print("静态块");
    }

    public StaticLoadTest(String str) {
        System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
        ++n;
        ++i;
    }

    public static int print(String str) {
        System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
        ++i;
        return ++n;
    }

    private static class SingletonHolder {
        static StaticLoadTest instance = new StaticLoadTest("static-inner-class");
    }

    public static StaticLoadTest getInstance() {
        return StaticLoadTest.SingletonHolder.instance;
    }

    public static void main(String[] args) {
        StaticLoadTest t = new StaticLoadTest("init");
        StaticLoadTest.getInstance();
    }
}

© 著作权归作者所有

共有 人打赏支持
will--wang
粉丝 1
博文 42
码字总数 16772
作品 0
南京
高级程序员
从原理来理解继承关系的类初始化和实例化的顺序

就像之前的一个评论.我们学习的是思路. 很多人都知道继承关系的类的初始化和实例化的顺序,但如果忘记了怎么办? 如何找到自己的答案? 又如果遇到的问题是关于泛型的擦除问题,又该如何去分析?...

xpbug
2013/03/03
0
4
java 中静态代码块执行的时机

1、简单认为JAVA静态代码块在类被加载时就会自动执行 是错误的 2、正解:static块真正的执行时机 一个类的运行分为以下步骤: 装载 连接 初始化 装载阶段 通过类型的完全限定名,产生一个代表...

职业搬砖20年
07/06
0
0
java的反射和它的类加载机制

java 的类装载系统: 在java虚拟机中有两种类装载器: 启动类装载器 和 自定义类装载器。 前者是jvm的一部分,后者是java程序的一部分。不同的类装载器放在不懂得命名空间中。 类转载子系统涉...

Richard_sun
2013/01/18
0
0
[敏捷JAVA读书笔记-java基础部分] 第四章

一、类变量和类方法 对象是由属性和行为构成,属性对应java类中的成员变量(实例变量和类变量),行为对应类中的方法。 java类的状态是由他的成员变量的状态决定的。 在java中被声明为stati...

穿越星辰
2010/05/13
0
0
[敏捷JAVA读书笔记-java基础部分] 第四章

一、类变量和类方法 对象是由属性和行为构成,属性对应java类中的成员变量(实例变量和类变量),行为对应类中的方法。 java类的状态是由他的成员变量的状态决定的。 在java中被声明为stati...

inferrrrrr
2010/05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
6
0
现场看路演了!

HiBlock
昨天
16
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
9
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
19
0
TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部