Khối Anonymous và Static trong Java

Khối vô danh (anonymous) trong Java

Trong java ta có thể đặt một khối lệnh không thuộc một phương thức nào, nghĩa là khối này không thuộc bất cứ phương thức nào kể cả hàm tạo, khi đó khối lệnh này được gọi là khối vô danh, khối vô danh này được java gọi thực thi khi một đối tượng được tạo ra, các khối vô danh được gọi trước cả hàm tạo.

Thông thường ta hay sử dụng khối vô danh để khởi đầu các thuộc tính của lớp hoặc được sử dụng để khởi tạo cho các thộc tính của một lớp vô danh (vì lớp vô danh không có tên do vậy ta không thể viết hàm tạo cho lớp này, trong trường hợp này khối vô danh là giải pháp duy nhất).

image

Ở ví dụ này ta có 3 khối vô danh, khi chạy java cho thực thi các khối vô danh này theo thứ tự từ trên xuống dưới
public class Student {
  // hàm constructor
  public Student (){
    System.out.println ( "Đây là hàm tạo" );
  }

  // bắt đầu khối vô danh
  {
    System.out.println ( "Khối vô danh thứ 1 ");
  }// kết thúc khối vô danh

  //bắt đầu khối vô danh
  {
    System.out.println ( "Khối vô danh thứ 2");
  }//kết thúc khối vô danh

  // bắt đầu khối vô danh
  {
    System.out.println ( "Khối vô danh thứ 3");
  }//kết thúc khối vô danh

  public static void main ( String[] args ) {
    Student dt1 = new Student ();
    Student dt2 = new Student ();
  }
}
Kết quả
Khối vô danh thứ 1
Khối vô danh thứ 2
Khối vô danh thứ 3
Đây là hàm tạo
Khối vô danh thứ 1
Khối vô danh thứ 2
Khối vô danh thứ 3
Đây là hàm tạo

Khối tĩnh (static) trong Java

Khối tĩnh (static) là một khối lệnh bên ngoài tất cả các phương thức, kể cả hàm tạo, trước khối lệnh này ta đặt từ khoá static, từ khoá này báo cho java biết đây là khối khởi đầu tĩnh, khối này chỉ được gọi 1 lần khi đối tượng đầu tiên của lớp này được tạo ra, khối khởi đầu tĩnh này cũng được java gọi tự động trước bất cứ hàm tạo nào, thông thường ta sử dụng khối khởi đầu tĩnh để khởi đầu các thuộc tính static

Sau đây là một ví dụ có 1 khối khởi đầu tĩnh và một khối vô danh, để bạn thấy được sự khác nhau giữa khối khởi đầu tĩnh và khối vô danh
public class Student {
  // hàm constructor
  public Student (){
    System.out.println ( "Đây là hàm tạo" );
  }

  // bắt đầu khối vô danh
  {
    System.out.println ( "Khối vô danh thứ 1 ");
  }// kết thúc khối vô danh

  //bắt đầu khối vô danh
  {
    System.out.println ( "Khối vô danh thứ 2");
  }//kết thúc khối vô danh

  // bắt đầu khối vô danh
  {
    System.out.println ( "Khối vô danh thứ 3");
  }//kết thúc khối vô danh

  static { // đây là khối static
    System.out.println ("Đây là khối static");
    System.out.println("Khối này chỉ được gọi 1 lần khi thể hiện đầu tiên của lớp được tạo ra");
  }

  public static void main ( String[] args ) {
    Student dt1 = new Student ();
    Student dt2 = new Student ();
  }
}

Kết quả
Đây là khối static
Khối này chỉ được gọi 1 lần khi thể hiện đầu tiên của lớp được tạo ra
Khối vô danh thứ 1
Khối vô danh thứ 2
Khối vô danh thứ 3
Đây là hàm tạo
Khối vô danh thứ 1
Khối vô danh thứ 2
Khối vô danh thứ 3
Đây là hàm tạo

Nhìn vào kết quả ra ta thấy khối khởi đầu tĩnh chỉ được java gọi thực hiện 1 lần khi đối tượng đầu tiên của lớp này được tạo, còn khối vô danh được gọi mỗi khi một đối tượng mới được tạo ra

Avatar Administrator

Administrator

@thaycacac
Ta không thể bắt đầu lại nhưng ta có thể mở đầu bây giờ và làm nên một kết thúc mới.
Logo thể loại Java

Java

Chuyên mục học lập trình
Học Java từ cơ bản đến thông thạo cho mọi đối tượng
hello