Với ví dụ đơn giản như của bạn, không có gì xấu có thể xảy ra. Tuy nhiên, nó là có thể cho trường final
để hiển thị dưới dạng chưa được khởi tạo nếu bạn sử dụng các thực tiễn có vấn đề như gọi phương thức có thể ghi đè trong hàm tạo của bạn.
Ví dụ: chương trình sau in "Màu yêu thích của tôi là rỗng", mặc dù nó tham chiếu biến cuối cùng favouriteColour
, được đặt thành "blue"
trong hàm tạo.
abstract class SuperClass {
final String favouriteColour;
SuperClass() {
announceFavouriteColour();
favouriteColour = "blue";
}
abstract void announceFavouriteColour();
}
public class FinalTest extends SuperClass {
void announceFavouriteColour() {
System.out.println("My favourite colour is " + favouriteColour);
}
public static void main(String[] args) {
new FinalTest();
}
}
Nguồn
2010-03-30 18:29:08
Cảm ơn! Và điều này dẫn đến http://stackoverflow.com/questions/2547713/why-static-fields-are-not-initialized-in-time –
Đây là từ một thời gian dài trước đây, nhưng tôi chỉ muốn nói rằng mặc dù điều này có thể không xảy ra, nó làm với tôi. Điều duy nhất tôi có thể nghĩ đến là bởi vì đó là GWT mà tôi đang xử lý, vì vậy nó là Java được biên dịch chéo với JScript. – Jamie