码迷,mamicode.com
首页 > 编程语言 > 详细

Initialization and Class loading - Java

时间:2014-06-02 00:48:48      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

  可以说,类的代码在初次使用时才加载。这通常指加载发生于创建类的第一个对象之时,但当访问

static域或static方法时,也会发生加载。

  所有的static对象和static代码段会在加载时按照程序中的顺序(定义类时的书写顺序)而依次初始化。

  本文将以下面的代码为例展开论述:

bubuko.com,布布扣
class Insect {
  private int i = 9;
  protected int j;
  Insect() {
    System.out.println("i = " + i + ", j = " + j);
    j = 39;
  }
  private static int x1 =
    printInit("static Insect.x1 initialized");
  static int printInit(String s) {
    System.out.println(s);
    return 47;
  }
}

public class Beetle extends Insect {
  private int k = printInit("Beetle.k initialized");
  public Beetle() {
    System.out.println("k = " + k);
    System.out.println("j = " + j);
  }
  private static int x2 =
    printInit("static Beetle.x2 initialized");
  public static void main(String[] args) {
    System.out.println("Beetle constructor");
    //Beetle b = new Beetle();    // 1 
    //Beetle b;    //2
  }
}
bubuko.com,布布扣

Output:

lxw@11:03:16:~/eclipse/java/javaComLine$ java Beetle 
static Insect.x1 initialized
static Beetle.x2 initialized
Beetle constructor

Analyze:

  程序执行后,将试图访问main(),于是开始启动并找出Beetle类的编译代码,在加载的过程中编译器注意到它有一个基类,于是先对基类进行加载。

此时基类中的static初始化开始被执行,然后执行导出类中的static初始化。”先执行基类然后再执行导出类“的原因是导出类的static初始化可能会依赖于基

类成员是否被初始化。

  简略的说就是:基类的static数据成员初始化 -> 导出类的static数据成员初始化 -> main()

  至此,不管代码中是否创建一个基类或导出类的对象都执行这些步骤。

 

 

Initialization and Class loading - Java,布布扣,bubuko.com

Initialization and Class loading - Java

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/lxw0109/p/Initialization_and_class_loading.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!