Java类成员初始化顺序与数组初始化

1 Java静态引入
import java.lang.Math.min;

import java.lang.Math.*;

2 Java支持可变参数,用时再查

3 finalize
finalize 可以说有点多余,用处不大,唯一的用处就是用来标识一些信息,以便发现错误。
下面是一种它的用法:
class Book {
    boolean checkedOut = false;
    Book(boolean checkOut) {
        checkedOut = checkOut;
    }
    void checkIn() {
        checkedOut = false;
    }
    protected void finalize() {
        if(checkOut)
            System.out.println("Error: checked out");
    }
}

public class TerminationCodition {
    public static void main(String[] args) {
        Book novel = new Book(true);
        //Proper cleanup
        novel.checkIn();
        //Drop the reference, forget to clean up
        //此处忘记清理工作,通过finalize可以发现此错误
        new Book(true);
        System.gc();
    }

}


4 Java成员初始化顺序

自动初始化将在构造器被调用之前发生。
public class Counter {
    int i;
    Counter() {i = 7;}
}
那么i首先被置0,然后变成7.
再来举个例子,用来证明,无论类的变量在代码的哪一行,它总是在调用构造器
前被初始化.

静态成员初始化:

/*
 * 静态初始化只有在必要时刻才会进行,如果不创建Table
 * 对象,也不引用Table.b1或Table.b2,那么静态的Bowl b1
 * 和b2永远都不会被创建。只有在第一个Table对象被创建的时候,
 * 它们才会初始化,此后静态对象不会再次被初始化.
 */

class Bowl {
  Bowl(int marker) {
    System.out.println("Bowl(" + marker + ")");
  }
  void f1(int marker) {
    System.out.println("f1(" + marker + ")");
  }
}

class Table {
  static Bowl bowl1 = new Bowl(1);
  Table() {
    System.out.println("Table()");
    bowl2.f1(1);
  }
  void f2(int marker) {
    System.out.println("f2(" + marker + ")");
  }
  static Bowl bowl2 = new Bowl(2);
}

class Cupboard {
  Bowl bowl3 = new Bowl(3);
  static Bowl bowl4 = new Bowl(4);
  Cupboard() {
    System.out.println("Cupboard()");
    bowl4.f1(2);
  }
  void f3(int marker) {
    System.out.println("f3(" + marker + ")");
  }
  static Bowl bowl5 = new Bowl(5);
}

public class StaticInitialization {
  public static void main(String[] args) {
    System.out.println("Creating new Cupboard() in main");
    new Cupboard();
    System.out.println("Creating new Cupboard() in main");
    new Cupboard();
    table.f2(1);
    cupboard.f3(1);
  }
  /* 当main方法被调用时,下面两个静态变量将在main被调用前初始化 */
  static Table table = new Table();
  static Cupboard cupboard = new Cupboard();
} 

5 创建数组

创建数组的两种形式:




你可能感兴趣的:(Java)