java代码的初始化过程研究
java代码的初始化过程研究
刚刚在ITeye上看到一篇关于java代码初始化的文章,看到代码我试着推理了下结果,虽然是大学时代学的知识了,没想到还能做对。(看来自己大学时掌握的基础还算不错,(*^__^*) 嘻嘻……)但是博主写的不够详细具体,我想在这详细谈一下java代码的具体初始化过程。
首先要清楚java代码的初始化过程研究,初始化分为两个过程:类初始化、对象初始化。
类初始化是指类加载器将类加载到内存时,对类成员的初始化过程,也就是有修饰的变量。对于加载完的类,它的类变量都会赋一个默认值,即使你定义时就赋值了。比如int类型就是0java代码的初始化过程研究,引用类型就是null。(语言有点苍白无力了,我还是直接上例子吧!)
public class Test {
private static int number = 5;
private static Object object = new Object();
}
让我们来分析下这个实例,Test类有两个类成员变量java 类初始化,当类被加载完后就要进行类的初始化过程,虽然和都在定义时被赋予了值,但是他们还是首先被赋予0和null值java 类初始化,哪什么时候才将我们的5和对象赋予呢?它是在编译后经过一个静态代码块赋值。所以他的实际初始化过程类似于如下代码:
public class Test {
private static int number = 0;
private static Object object = null;
static{
number = 5;
object = new Object();
}
}

对象初始化是指当我们创建对象时的初始化过程java 类初始化,它的初始化过程跟类初始化过程很相似,只是多了一个构造函数的过程。直接上代码:
public class Test {
private int number = 5;
private Object object = new Object();
{//这是一个动态代码块,现实中很少用到,其实跟直接定义成员变量差不多
number = 6;
}
public Test(){
}
}
表达能力还真是有限,我还是感觉直接上代码说的清楚,它的实际初始化过程的类似于如下代码:
public class Test {
private int number = 0;
private Object object = null;
public Test(){
number = 5;
object = new Object();
number = 6;
}
}
你没有看错,动态代码块直接就没了,赋值过程都被移到了构造方法中了。变量定义和动态代码块一样都是按照出现的顺序移到构造方法中的。

以上就是类初始化过程和对象初始化过程,不知道有没有说清楚,做几个小题测试一下吧^_^。(这里就直接拿刚才ITeye上看到的代码为例吧)
public class JvmTest { private static JvmTest JvmTest = new JvmTest(); private static int count1; private static int count2 = 5; public JvmTest() { count1++; count2++; } public static JvmTest getInstance() { return JvmTest; } public static void main(String[] args) { System.out.println("count1=" + JvmTest.count1); System.out.println("count2=" + JvmTest.count2); } }
不知道你能不能通过以上的讲解推理出打印什么值,这里我把实际初始化过程的代码发一下:
public class JvmTest { private static JvmTest JvmTest = null;//这是系统默认赋值 private static int count1 = 0;//这是系统默认赋值 private static int count2 = 0;//这是系统默认赋值 static{ JvmTest = new JvmTest(); count2 = 5; } public JvmTest() { count1++;//执行++前值为0 count2++;//执行++前值为0 } public static JvmTest getInstance() { return JvmTest; } public static void main(String[] args) { System.out.println("count1=" + JvmTest.count1); System.out.println("count2=" + JvmTest.count2); } }
不早了,准备谁家,大家晚安O(∩_∩)O
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299
资源库 - 资源分享下载网 » java代码的初始化过程研究
常见问题FAQ
- 关于资源售价和售后服务的说明?
- 代码有没有售后服务和技术支持?
- 有没有搭建服务?
- 链接地址失效了怎么办?
- 关于解压密码

