欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

初始化

程序员文章站 2022-04-29 18:06:10
构建器初始化 我们可以在构建器中执行初始化进程。但是不可以妨碍自动初始化的进行,它在构建器进入之前就会发生。下面的程序i首先会初始化为0,然后变成7。 class Counter { int i; Counter() { i = 7; } // . . . 静态数据的初始化 如果是基本类型,会自动获 ......

构建器初始化

我们可以在构建器中执行初始化进程。但是不可以妨碍自动初始化的进行,它在构建器进入之前就会发生。下面的程序i首先会初始化为0,然后变成7。

class counter {
int i;
counter() { i = 7; }
// . . .

静态数据的初始化

如果是基本类型,会自动获取自己的标准初始化值;如果是指向一个对象,除非新建一个对象,否则为null

只有发生了第一次static访问,它们才会创建。在那以后,static对象不会重新初始化

初始化的顺序是static,随后是非static对象。

//: staticinitialization.java
// specifying initial values in a
// class definition.
class bowl {
    bowl(int marker) {
        system.out.println("bowl(" + marker + ")");
    }
    void f(int marker) {
        system.out.println("f(" + marker + ")");
    }
}
class table {
    static bowl b1 = new bowl(1);
    table() {
        system.out.println("table()");
        b2.f(1);
    }
    void f2(int marker) {
        system.out.println("f2(" + marker + ")");
    }
    static bowl b2 = new bowl(2);
}
public class staticinitialization {
    public static void main(string[] args) {
        system.out.println(
                "creating new cupboard() in main");
        system.out.println(
                "creating new cupboard() in main");
//        t2.f2(1);
    }
//    static table t2 = new table();

} ///:~

如果把t2注释掉,table没有程序访问,所以table不会初始化。

下面总结一下对象的创建过程。以dog类为例:

  1. 类型为dog的对象首次创建时,或dog类的static方法/static字段首次访问时,java解释器必须找到dog.class。
  2. 找到后,会创建一个class对象,它的所有static初始化模块都会运行。因此static初始化仅发生一次——在class对象首次载入的时候
  3. 创建一个一个new dog()时,dog对象的构建进程首先会在内存堆里为一个dog分配足够多的存储空间
  4. 存储空间会清为0,将dog中的所有基本类型设为它们的默认值。
  5. 进行字段定义时发生的所有初始化都会执行。
  6. 执行构建器。

...

class spoon {
    static int i;
    static {
        i = 47;
    }
}

上面的static块与其他static初始化一样,仅执行一次————首次生成这个类的第一个对象时,或者首次访问static成员时。

数组初始化

数组定义:int[] al;int al[];

数组初始化的方式:

  1. 特殊初始化,必须在数组创建的地方。int[] a1 = { 1, 2, 3, 4, 5 };
  2. 在其他地方。 a = new integer[10];

我们可以将一个数组分配给另一个数组。能使用这个语句a2 = a1

基本数据类型的数组元素会自动初始化为“空”值(对于数值,空值是零,对于char,是null,对于boolean,是false)。