2011-12-23 23 views
7

Giả sử rằng tôi chỉ có lớp với các phương thức tĩnh. Trình nạp lớp sẽ tải mọi lớp được nhập khi tải lớp vào bộ nhớ? Hoặc nó sẽ chỉ tải nhập khẩu khi một phương pháp từ này sẽ cần truy cập vào nó?Khi nào thì tải lớp cấp dữ liệu nhập?

Câu hỏi liệu trình nạp lớp có tải nhập khi lớp được tải vào bộ nhớ hay chỉ trước khi một số phương thức muốn sử dụng chúng. Nếu đó là tùy chọn đầu tiên tôi có thể cần phải chia một số lớp học Util của mình, để được nhiều hơn chuyên.

Trả lời

14

Tôi nghĩ rằng bạn có thể kiểm tra nó như sau:

package pkg1; 

public class Test { 

    static { 
     System.out.println("Hello 111"); 
    } 

    public static void meth() { 
     System.out.println("Hello 222"); 
    } 
} 

Test 1:

package pkg2; 

import pkg1.Test; 

public class Tester {  

    public static void main(String... args) {     
     Test t;  
    }  
} 

Đó in gì cả.

thử nghiệm 2:

package pkg2; 

import pkg1.Test; 

public class Tester {  

    public static void main(String... args) {     
     Test.meth();   
    } 

} 

Prints:

 
Hello 111 
Hello 222 

Vì vậy, chỉ vì bạn đã nhập một lớp học không có nghĩa là classloader sẽ load các lớp vào bộ nhớ. Nó tải nó tự động khi nó được sử dụng.

2

Tôi không yêu cầu biết nhiều về trình tải lớp, nhưng nếu bạn đang nói về các câu lệnh nhập thì trình tải lớp không liên quan.

Báo cáo nhập tồn tại hoàn toàn để cho phép nhà phát triển sử dụng tên lớp ngắn thay vì tên đủ điều kiện của mỗi lớp được tham chiếu trong lớp đang được viết. Trình biên dịch sử dụng những câu lệnh nhập khẩu này rất sớm để giải quyết tên của các lớp được tham chiếu trước khi một dòng bytecode được tạo ra.

1

Nói chung, khối mã tĩnh ở đầu tệp lớp có báo cáo (ví dụ: báo cáo in) sẽ cho bạn ý tưởng hay về thời điểm tải xảy ra trong ứng dụng cụ thể của bạn.

Tuy nhiên, khi xử lý các trường hợp góc, như lớp động, lớp tĩnh bên trong, hoặc lớp ngoài đường dẫn lớp được nạp động, bạn sẽ phải cẩn thận - vì các lớp này thực sự có thể được tải nhiều lần trong một ứng dụng.

+0

[cần dẫn nguồn] cho phần "nhiều lần". – meriton

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