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

java对象的实例化过程

2012-07-15 21:05 337 查看
关于对象的实例化过程:

1.检查类是否加载,如果没有加载就加载这个类,要加载所有父类;

懒式加载(按需加载):如果第一次用到加载,只加载一下.通过ClassPath制定的路径寻找类文件(.class) 加载以后是一个对象,类型是class.获得这个类对象:student.class-->class实例

2.在内存堆中分配对象空间.递归分配所有父类和子类属性空间.先父类型再子类型,属性默认自动初始化.自动初始化为"0"值;

3.进行属性的赋值;

4.递归调用父类构造器.(默认调用父类无参构造器);

5.调用本类构造器

其实面试过程中有很多类似的考题,考的都是初始化的顺序;首先要弄清楚以下几个概念:

1.静态初始化是指执行静态初始化块里面的内容;

2.实例初始化是指执行实例初始化块里的内容;

3.构造方法:一个名称跟类的名称一样的方法,特殊在于不带返回值;

给出以下代码,方便理解:

public class TestInstanceInit {

public static int n = 0;// 静态变量

static {// 这是静态初始化块

print();

System.out.println("this is static block");

}

{// 实例初始化块

System.out.println(n);

}

public TestInstanceInit() {// 构造方法

System.out.println("this is TestInstanceInit's constructor~");

}

public static void print() {// 静态方法

System.out.println("this is static method~");

System.out.println(n);

n += 1;

}

public static void main(String[] args) {

new TestInstanceInit();

}

}

控制台输出结果:

this is static method~

0

this is static block

1

this is TestInstanceInit's constructor~

如果有一个变量怎么处理呢:

public class TestInstanceInit {

// 静态变量

public static String staticField = "静态变量";

// 变量

public String field = "变量";

// 静态初始化块

static {

System.out.println(staticField);

System.out.println("静态初始化块");

}

// 初始化块

{

System.out.println(field);

System.out.println("初始化块");

}

// 构造器

public TestInstanceInit() {

System.out.println("构造器");

}

public static void main(String[] args) {

new TestInstanceInit();

}

}

控制台输出结果:
静态变量

静态初始化块

变量

初始化块

构造器

总结如下:

执行顺序

(静态变量、静态初始化块)>(变量、初始化快)>构造器

静态变量和静态初始化快/变量和初始化快的先后顺序取决于它们在类中出现的先后顺序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: