Java类初始化顺序分析
来源:互联网 发布:tcp udp端口号小于 编辑:程序博客网 时间:2024/06/06 06:36
近来碰到了Java类初始化顺序的问题(主要是静态部分),故整理在此。因为Java虚拟机部分还没研究完,所以先写一点编程中出现的情况,至于原理和为什么以后再补充。
首先提一下:
1、类(静态)变量
虚拟机对类(静态)变量当作声明类型的一部分数据存储在方法区
2、编译时常量
编译时常量(即用final声明以及编译时就已知值的初始化的类变量)不同,每个使用编译时常量的类型都会复制它的所有常量到自己的常量池中。
3、类变量作为声明它们的类型的一部分数据而保存,编译时常量作为使用它们的类型的一部分而保存。作为常量池或字节码流的一部分,编译时常量被保存在方法区中 --- 就和一般的类变量一样。
以下进入正题
一、Java类总体初始化顺序为:1、静态部分(a.静态变量 b.静态初始化块)2、非静态部分(a.变量 b.初始化块 c.构造器)
二、静态部分初始化顺序为:声明顺序(静态成员和静态代码快)。但要注意的是如果类型为final的原始类型则在用到时即初始化,而引用类型(即使为final类型)仍然根据顺序初始化。示例代码:
static
{
showInfo();
}
public static void showInfo()
{
System.out.println(a);
System.out.println(c);
}
// 静态变量
public static TestA a = new TestA();
public static int c = 10;
当a和c都不为final时侯,将打印null和0.如果为final,则打印null和10
三、非静态部分初始化顺序为:声明顺序
四、类继承体系初始化顺序:a.父类静态部分b.子类静态部分c.父类非静态部分d.子类非静态部分
- Java类初始化顺序分析
- JAVA 类初始化顺序
- Java类初始化顺序
- java类初始化顺序
- java类初始化顺序
- JAVA类 初始化顺序
- java类初始化顺序
- java 类初始化顺序
- java类初始化顺序
- java类初始化顺序
- java类初始化顺序
- java类初始化顺序
- java类初始化顺序
- java类初始化顺序
- java类初始化顺序
- Java类初始化顺序
- java类初始化顺序
- java类初始化顺序
- JS实现鼠标移上图片显示、大图显示
- 添加mysql日志
- HashMap vs TreeMap vs LinkedHashMap vs HashTable
- 学科大于2的学生,按姓名排序资料
- C# 最快的大文件拷贝方法
- Java类初始化顺序分析
- 通过使用临时表来删除表中重复的记录
- mysql存储过程小点
- Java值传递和引用传递
- Web缓存技术概述
- 在文本框中添加图片
- 补码知识
- 源代码解读Cas实现单点登出(single sign out)功能实现原理
- 一个有关JS参数的问题