2011-06-17 30 views
6

Các biến tĩnh Java có được chia sẻ trên các phiên bản của cùng một ứng dụng web không?Phạm vi của thành viên tĩnh Java trong các ứng dụng web

class MyClass 
{ 
    private static SomeClass myStaticObject = new SomeClass(); 
} 

Nếu một ứng dụng web sử dụng MyClass và nhiều trường hợp của ứng dụng được chạy trên một máy chủ web, là myStaticObject khởi tạo nhiều lần?

Trả lời

8

Thông thường, có. Hầu hết các thùng chứa sẽ cung cấp các trình nạp lớp riêng biệt cho từng ứng dụng web. Điều này sẽ dẫn đến lớp được nạp nhiều lần khi được nhiều ứng dụng sử dụng, và do đó dẫn đến nhiều phiên bản của biến tĩnh.

nêu rõ Java Language Specification để tham khảo:

Vào lúc chạy, một số loại tài liệu tham khảo với tên nhị phân tương tự có thể được nạp cùng một lúc bởi bộ tải lớp khác nhau. Các loại này có thể hoặc có thể không đại diện cho cùng một loại khai báo . Ngay cả khi hai loại như vậy làm thể hiện cùng một tuyên bố loại, thì chúng được coi là khác biệt.

Theo suy luận, nhiều trường hợp biến tĩnh sẽ tồn tại, trừ khi các lớp được tải chỉ một lần bởi trình nạp lớp cha và không bao giờ được tải ở bất kỳ đâu bởi trình tải lớp khác.

-1

Tôi không thấy điểm có biến số private static trong MyClass. Nếu đó là private bạn không thể truy cập nó dưới dạng biến lớp từ bên ngoài lớp bạn đã xác định. Nếu bạn chỉ muốn các lớp khác truy cập biến này thông qua phương thức getter, bạn nên xóa từ khóa static.

+3

Có rất nhiều trường hợp sử dụng biến 'private static'. Một trong số đó là giữ ID đối tượng có sẵn tiếp theo. –

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