2015-06-01 17 views
6

Tôi có một lớp với các biến tĩnh như:Cập nhật các biến tĩnh trong java

class Commons { 
public static String DOMAIN ="www.mydomain.com"; 
public static String PRIVATE_AREA = DOMAIN + "/area.php"; 
} 

Và nếu tôi cố gắng thay đổi DOMAIN từ một Hoạt động Android (hoặc một lớp java) trong thời gian chạy, sự thay đổi biến DOMAIN nhưng PRIVATE_AREA không thay đổi. Tại sao?

+0

Đừng giới thiệu các biến tĩnh có thể thay đổi - đó là một trong những patters tồi tệ nhất trong java giới thiệu entropy và các vấn đề bảo trì – rgasiore

Trả lời

6

Điều này là do sự phân công của lĩnh vực tĩnh xảy ra khi lớp được nạp (xảy ra một lần duy nhất) vào JVM. Biến số PRIVATE_AREA sẽ không được cập nhật khi biến số DOMAIN bị thay đổi.

public class Test { 
    public static String name = "Andrew"; 
    public static String fullName = name + " Barnes"; 
    public static void main(String[] args){ 
     name = "Barry"; 
     System.out.println(name); // Barry 
     System.out.println(fullName); // Andrew Barnes 
    } 
} 

Tôi khuyên bạn nên sử dụng cấu trúc sau.

public class Test { 
    private static String name = "Andrew"; 
    public static String fullName = name + " Barnes"; 

    public static void setName(String nameArg) { 
     name = nameArg; 
     fullName = nameArg + " Barnes"; 
    } 

} 

Test2.java

public class Test2 { 

    public static void main(String[] args){ 
     System.out.println(Test.fullName); // Andrew Barnes 
     Test.setName("Barry"); 
     System.out.println(Test.fullName); // Barry Barnes 
    } 
} 
+0

có cách nào để cập nhật biến thứ hai hoặc chia sẻ các biến giữa các lớp khác không? – AlexBerry

+0

@AlexBerry Vui lòng xem chỉnh sửa của tôi! – SamTebbs33

+0

Xét về cơ bản bạn đang sử dụng một setter Tôi chỉ khuyên bạn nên sử dụng cấu trúc setter/getter thay vì statics ở vị trí đầu tiên. – Wald

0

PRIVATE_AREA did't thay đổi vì nó được thiết lập đúng thời hạn khai. Khi bạn thay đổi DOMAIN, nó không có hiệu lực trên PRIVATE_AREA. Có lẽ tốt hơn là làm việc với các phương thức setter (...) và getter() và các biến cục bộ. Khi nhận được PRIVATE_AREA Bạn tạo lại giá trị retrun.

0

Chuyển nhượng biến xảy ra tại thời gian tải thats lớp tại sao sau đó nếu bạn thay đổi giá trị của một biến tĩnh, nó sẽ không phản ánh có nơi nó được gán cho một biến khác

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