原文:(
陈宝峰的专栏)http://blog.csdn.net/stevencn76/archive/2007/11/09/1875621.aspx
很多人在学习Java的过程中不了解对象初始化的具体步骤到底如何,只是模糊的知道构造函数等可以进行初始化的内容,我们现在对Java中的类初始化步骤做一个详细的解析。
首先我们来了解一下到底有哪些地方可以初始化,我们给出下面的一段示例代码:
public
classs Book
{
private String name; 默认初始化,初始化的值由系统给定,为null
private double price = 20.0; //默认初始化,初始化的值为20.0
private static int type;
//下面这个为静态初始化模块
static {
type = 1;
}
//下面这个为初始化模块
{
price = 30.0;
}
//类的构造方法
public Book(String name, double price) {
this.name = name;
this.price = price;
}
}
在上面的代码中我们可以看到,总共存在这样几个可以做初始化的地方:
1、静态初始化模块
2、默认初始化
3、初始化模块
4、构造方法
现在我们来说明这些初始化的步骤:
1、在类第一次被加载的时候的,静态初始化模块会工作完成一个部分初始化任务
2、在类构造对象的时候,具体步骤如下:
a、系统创建类的实例对象
b、执行默认初始化,如果程序中指定了默认初始化的值,那么就按照默认值进行初始化,如果程序中没有指定初始化的值,那么由系统自动赋值,赋值的原则为:“一切都是0”,整型属性赋值0,浮点属性赋值0.0,字符属性赋值‘/0',布尔类型属性赋值false,引用类型属性赋值null
c、执行初始化模块,如果程序中存在多个初始化模块,那么按照书写顺序执行所有初始化模块。
d、执行对象中的构造方法。
完成上述步骤,一个对象的初始化任务就算彻底完成了。
很多人在学习Java的过程中不了解对象初始化的具体步骤到底如何,只是模糊的知道构造函数等可以进行初始化的内容,我们现在对Java中的类初始化步骤做一个详细的解析。
首先我们来了解一下到底有哪些地方可以初始化,我们给出下面的一段示例代码:
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
在上面的代码中我们可以看到,总共存在这样几个可以做初始化的地方:
1、静态初始化模块
2、默认初始化
3、初始化模块
4、构造方法
现在我们来说明这些初始化的步骤:
1、在类第一次被加载的时候的,静态初始化模块会工作完成一个部分初始化任务
2、在类构造对象的时候,具体步骤如下:
a、系统创建类的实例对象
b、执行默认初始化,如果程序中指定了默认初始化的值,那么就按照默认值进行初始化,如果程序中没有指定初始化的值,那么由系统自动赋值,赋值的原则为:“一切都是0”,整型属性赋值0,浮点属性赋值0.0,字符属性赋值‘/0',布尔类型属性赋值false,引用类型属性赋值null
c、执行初始化模块,如果程序中存在多个初始化模块,那么按照书写顺序执行所有初始化模块。
d、执行对象中的构造方法。
完成上述步骤,一个对象的初始化任务就算彻底完成了。