2011-11-10 39 views

Trả lời

5

Đây là khối mã đó sẽ nhận được viện dẫn khi lớp học của bạn được tải bởi classloader

+0

Cảm ơn Joshi. Trên thực tế, tôi muốn dịch mã này sang C++. Bạn có thể giải thích làm thế nào tôi có thể làm điều này? –

+1

@sufyansiddique: Bạn nên đưa ra một câu hỏi mới. –

+0

Có gì trong C++ được thực hiện khi lớp được nạp chỉ cần đặt khối mã ở đó chỉ đơn giản là –

1

này được gọi là khối khởi tạo tĩnh và sẽ được thực hiện một lần, khi lớp này được nạp.

5

Đây là khối khởi tạo tĩnh. Bạn phải tìm thấy nó trong cơ thể của một lớp học bên ngoài bất kỳ phương pháp nào. Khối init tĩnh chỉ chạy một lần cho mỗi lớp, tại thời điểm tải lớp.

16

Đây là khối khởi tạo tĩnh. Hãy nghĩ về nó như một phiên bản tĩnh của hàm tạo. Các constructor được chạy khi lớp được khởi tạo; các khối khởi tạo tĩnh sẽ chạy khi lớp được nạp.

Bạn có thể sử dụng chúng cho một cái gì đó như thế này (mã rõ ràng là bịa đặt):

private static int myInt; 

static { 
    MyResource myResource = new MyResource(); 
    myInt = myResource.getIntegerValue(); 
    myResource.close(); 
} 

Hãy xem phần "tĩnh khởi Blocks" của Oracle's tutorial on initializing fields.

+0

Cảm ơn Jonathan. –

1

Sufyan,

initializers tĩnh không được thừa kế và chỉ được thực hiện một lần khi lớp được nạp và khởi tạo bởi JRE. Điều đó có nghĩa là khối tĩnh này sẽ được khởi tạo chỉ một lần bất kể bạn đã tạo ra bao nhiêu đối tượng trong lớp này.

Tôi không phải là một fan hâm mộ lớn của nó và tôi chắc chắn có lựa chọn thay thế tốt hơn cho nó tùy thuộc vào tình hình.

Cảm ơn, Reds

1

Cú pháp này đã được lỗi thời như Java 7. Bây giờ tương đương là:

public static void main(String[] args) { 
    /* 
     stuff 
    */ 
} 
Các vấn đề liên quan