1. Khối vụ danh
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
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 )
Vớ dụ: ở 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 Untitled1{ // hàm tạo
public Untitled1 (){
System.out.println ( "Day la ham tao" ); }
// bắt đầu khối vụ danh {
System.out.println ( "khoi khoi dau thu 3 "); }// kết thỳc khối vụ danh
//bắt đầu khối vụ danh {
System.out.println ( "khoi khoi dau thu 1 "); }//kết thỳc khối vụ danh
// bắt đầu khối vụ danh {
System.out.println ( "khoi khoi dau thu 2 "); }//kết thỳc khối vụ danh
{
Untitled1 dt1 = new Untitled1 (); Untitled1 dt2 = new Untitled1 (); }
}
khi chạy chương trỡnh sẽ cho kết quả sau:
khoi khoi dau thu 3 khoi khoi dau thu 1 khoi khoi dau thu 2 Day la ham tao khoi khoi dau thu 3 khoi khoi dau thu 1 khoi khoi dau thu 2 Day la ham tao
2. Khối khởi đầu tĩnh
Khối khởi đầu tĩnh 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 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 Untitled1 {
public Untitled1 () {
System.out.println ( "Đõy là hàm tạo" ); }
static {// đõy là khối khởi đầu tĩnh
System.out.println ( "Đõy là khối khởi đầu tĩnh");
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");
}
{//đõy là khối vụ danh
System.out.println ( "Đõy là khối vụ danh "); }
public static void main ( String[] args ) {
Untitled1 dt1 = new Untitled1 ();/ / tạo ra thể hiện thứ nhất của lớp Untitled1 dt2 = new Untitled1 ();/ / tạo tiếp thể hiện thư 2 của lớp }
}
khi cho chạy chương trỡnh ta sẽ được kết quả ra như sau:
Đõy là khối khởi đầu tĩnh
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 Đõy là khối vụ danh
Đõy là hàm tạo Đõy là khối vụ danh Đõ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