I. Thứ tự khởi tạo:

Bên trong một lớp, thứ tự khởi tạo được xác định bởi thứ tự các biến được định nghĩa bên trong lớp đó. Các biến có thể được khai báo thưa thớt và nằm len lõi giữa các phương thức, nhưng chúng được khởi tạo trước cả các phương thức và Constructor.

Ví dụ:

class Tag {
  Tag(int marker) {
    System.out.println("Tag(" + marker + ")");
  }
}
class Card {
  Tag t1 = new Tag(1); // Before constructor
  Card() {
    // Indicate we're in the constructor:
    System.out.println("Card()");
    t3 = new Tag(33); // Reinitialize t3
  }
  Tag t2 = new Tag(2); // After constructor
  void f() {
    System.out.println("f()");
  }
  Tag t3 = new Tag(3); // At end
}
public class OrderOfInitialization {
  public static void main(String[] args) {
    Card t = new Card();
    t.f(); // Shows that construction is done
  }
}

Kết quả:

Tag(1)
Tag(2)
Tag(3)
Card()
Tag(33)
f()

II. Khởi tạo dữ liệu static

Khi dữ liệu là static, nếu nó là kiểu nguyên thủy thì không cần khởi tạo giá trị cho nó, nó sẽ nhận được các giá trị mặc định của kiểu dữ liệu nguyên thủy, nếu nó là kiểu tham chiếu thì sẽ được gởi gán giá trị null trừ khi ta tạo một đối tượng và gán tham chiếu vào cho nó.

Ví dụ:

 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);
}
class Cupboard {
  Bowl b3 = new Bowl(3);
  static Bowl b4 = new Bowl(4);
  Cupboard() {
    System.out.println("Cupboard()");
    b4.f(2);
  }
  void f3(int marker) {
    System.out.println("f3(" + marker + ")");
  }
  static Bowl b5 = 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();
    t2.f2(1);
    t3.f3(1);
  }
  static Table t2 = new Table();
  static Cupboard t3 = new Cupboard();
}

Kết quả:

Bowl(1)
Bowl(2)
Table()
f(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
f2(1)

f3(1)

Bạn thấy bài viết này thế nào?