java 对象的创建过程

初始化的顺序首先是static(如果它们尚未由前一次对象创建初始化,也就是new对象的时候,只执行一次static变量初始化),变量初始化顺序有变量在类的定义顺序决定的;

对象的创建过程,以Dog类为例:

1.类型为Dog首stati次创建的时候,或者Dog类的stajitic方法/static字段首次访问时,java编译器必须找到Dog.class;

2.找到Dog.class后(它会创建一个Class对象),它的所有static初始化模块都会运行。因此,static初始化仅发生一次-----在Class对象首次载入的时候

3.创建一个new Dog()时,Dog对象的构建进程首先会在内存堆(heap)里为一个Dog对象分配足够多的内存空间;

4.这种空间为情况为0,将Dog中的所有基本类型设为它们的默认值;

5.进行字段定义时发生的所有初始化都会执行;

6.执行构造器

 

package thinking;
//: Beetle.java
// The full process of initialization.
class Insect {
  int i = 9;
  int j;
  Insect() {
    prt("i = " + i + ", j = " + j);
    j = 39;
}
   static int x1 = prt("static Insect.x1 initialized");
   static int prt(String s) {
      System.out.println(s);
     return 47;
   }
}

继承类

package thinking;
public class Beetle extends Insect {
    int k = prt("Beetle.k initialized");
    Beetle() {
      prt("k = " + k);
      prt("j = " + j);
}
static int x2 = prt("static Beetle.x2 initialized");
static int prt(String s) {
    System.out.println(s);
    return 63;
}
public static void main(String[] args) {
    prt("Beetle constructor");
    Beetle b = new Beetle();
}
}

执行结果:

static Insect.x1 initialized
static Beetle.x2 initialized
Beetle constructor
i = 9, j = 0
Beetle.k initialized
k = 63
j = 39

转载于:https://www.cnblogs.com/newlangwen/p/9157536.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值