您的位置:首页 > 编程语言 > Java开发

java中的构造器初始化

2015-11-12 23:02 495 查看
在java中我们可以使用构造器(即构造方法)来进行初始化。首先,必须牢记:无法阻止自动初始化的进行,它将在构造器被调用之前发生。如下面的代码:

public class Counter{
int i;
Counter(){
i = 7;
}
}

这个程序的内部运行过程分为两步:

(1)先将 i= 0   (2)再调用构造方法,将i= 7.

对于所有的基本类型、对象的引用、在定义时已经指定初值的变量,都符合这个规律。

首先,我们先来分析类内部的初始化顺序:

在类内部,变量定义的先后顺序决定了变量的初始化顺序。即便类的定义分布在类的方法之间,还是会先在任何方法之前调用之前将变量初始化(包括构造器)。

下面的例子可以明显的体现内部的运行步骤(特别是 b2 和 b3 的运行结果):
package Test;

public class Initial {
public static void main(String[] args) {
A a = new A();
a.f();
}

}

class A {
B b1 = new B(1);

public A() {
b3 = new B(33333);
}

void f() {
System.out.println("f()");
}

B b2 = new B(2);
B b3 = new B(3);
}

class B {
public B(int i) {
System.out.println("B(" + i + ")");
}
}

运行结果如下:

B(1)

B(2)

B(3)

B(33333)

f()

结果中显示,b3对象被初始化了两次,第一次是在构造器初始化之前,第二次是在调用构造器中进行初始化的。这样,第一次引用的对象将被丢弃,等待垃圾回收器回收。

接下来,我们来看第二个大部分,对于静态数据的初始化:

例如 :
class C{
static int i;
public C(){
i = 7;
}
}


首先要注意一下几点:

(1)无论创建多少个对象,静态数据都只用一份存储区域。

(2)static不能应用与局部变量。

(3)如果是基本类型,默认初始值为基本类型的标准初值,如果是引用类型,默认初值为null

初始化的顺序为 先静态 --->  非静态

其实构造方法实际上就是静态方法

《java编程思想》这本书中,详细总结一个对象的创建过程,假设有为 Dog的类:

1.当首次创建Dog对象时,或者Dog类的静态方法,或者静态域首次被访问时,java的解释器会查找类的路径,定位。class文件。(.class文件是java程序   编译后生成的可执行文件)

2.载入Dog.class文件,有关静态初始化的所有方法都会执行。即,静态初始化只会在加载.class文件的时候执行一次。

3.new Dog对象时,会在堆上为该对象分配足够的存储空间。

4.该存储空间清零。并设置Dog对象的默认值。

5.执行所有出现在字段定义处的初始化动作。

6.执行构造器。

第三个,显式的静态初始化

例如:
public class c{
static int i ;
static{
i = 47
}
}

这段代码看起来像是方法,其实是一段跟在 static 关键字后面的代码,这段代码也只执行一次,在首次生成该类的对象时。

第四个, 非静态实例初始化

这是最基本的初始化,这里就不过多的解释了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java