2012-03-29 32 views
5

Không chắc chắn về các biến tĩnh.Lớp/biến tĩnh Java

import java.io.File; 

public class Logger { 
    public static final File log = new File(File.listRoots()[0], "log.log"); 
    public static void log (String message) { 
     /* ... */ 
    } 
} 

Biến số log trỏ đến cùng một bộ nhớ trong suốt thời gian của chương trình? Về cơ bản, định nghĩa lognew File(File.listRoots()[0], "log.log") được tính nhiều lần hoặc chỉ một lần và khi nào?

Xin cảm ơn trước.

Trả lời

11

Nó được gọi một lần cho mỗi trình nạp lớp. Mà, thông thường, có nghĩa là một lần. Một biến tĩnh được khởi tạo ngay khi lớp khai báo nó được nạp bởi trình nạp lớp và ở đó cho tới khi trình nạp lớp bị hủy, mà trong hầu hết các trường hợp có nghĩa là - ở cuối vòng đời thực thi chương trình/ứng dụng.

+0

nếu tôi truy cập nó như 'File f = Logger.log' tôi đang tạo một phiên bản mới của lớp. –

+0

không, nó giống nhau. – Bozho

+0

'File f = Logger.log' tạo một tham chiếu mới tới một tệp đã được khởi tạo. –

0

Chỉ một lần. AFAIK, khi lớp được nạp.

Các vấn đề liên quan