文档章节

JAVA static 装载顺序

Will--wang
 Will--wang
发布于 2017/07/24 20:28
字数 454
阅读 9
收藏 1
点赞 0
评论 0
/**
 * 类加载顺序:
 * 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
博文 15
码字总数 8802
作品 0
南京
JDBC中Class.forName()的作用

使用JDBC时,我们都会很自然得使用下列语句: java 代码 Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8"; ......

村长大神 ⋅ 2014/05/09 ⋅ 0

Java和Android ClassLoder对比以及Class加载过程

Java的ClassLoder的父子关系如下:Bootstrap--ExtClassClassLoader---AppClassLoader。 JVM启动时先运行启动类加载器Bottstrap,主要加载Java核心API;然后加载扩展类加载器ExtClassLoder,该...

JasmineBen ⋅ 05/23 ⋅ 0

类加载器ClassLoader-2

类装载器 大纲: n class装载验证流程 n 什么是类装载器ClassLoader n JDK中ClassLoader默认设计模式 n 打破常规模式 n 热替换 class装载验证流程: n 加载 n 链接 – 验证 – 准备 – 解析 ...

康熙兄弟 ⋅ 06/02 ⋅ 0

两道面试题,带你解析Java类加载机制

文章首发于【博客园-陈树义】,点击跳转到原文《两道面试题,带你解析Java类加载机制》 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: 请写出最后的输出字符...

陈树义 ⋅ 06/12 ⋅ 0

两道面试题带你解析 Java 类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ } class Father extends Grandpa{ }class Son extends Father{ }public class Initialization...

⋅ 06/13 ⋅ 0

Spring @autowired注解

1、在接口实现类中,使用到@Autowired 注解,下面是该注解使用的类 2、Spring@Autowired注解与自动装配 @Autowired顾名思义,就是自动装配,其作用是为了消除代码Java代码里面的getter/sett...

lar555 ⋅ 04/26 ⋅ 0

深入学习Java多线程——Java内存模型基础

1.处理器——缓存——主内存 1.1数据处理过程 由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都会加入一层读写速度尽可能接近处理器素的高速缓存来作为内存...

江左煤郎 ⋅ 06/14 ⋅ 0

Java基础|Java特性与HelloWorld运行流程

【Java基础】 Java语言特点:(着重了解两个)开源、跨平台。 跨平台如何实现:通过JVM实现,JVM充当Java和不同OS之间的翻译器,不同OS对应不同JVM。 Java语言的平台:JavaSE、JavaME(Androi...

darlingwood2013 ⋅ 05/29 ⋅ 0

你所需要的java提升篇大总结

java基础篇深入解析大总结 java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规则 java基础(三) 加强型for循环与Iterator java基础(四) java运算顺序的深入解析 java基础(五) Str...

sihailoveyan ⋅ 04/25 ⋅ 0

java编程新手入门学习的基础语法

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 56分钟前 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

【转】JS浮点数运算Bug的解决办法

37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎...

NickSoki ⋅ 今天 ⋅ 0

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 今天 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 今天 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 9

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部