Tôi nhận thấy một cái gì đó trong bộ khởi tạo tĩnh có thể là lỗi trong javac. Tôi đã xây dựng một kịch bản mà tôi có thể gán một biến một giá trị nhưng không đọc lại giá trị đó.Lỗi khởi tạo tĩnh nếu được đặt trước khai báo
Hai ví dụ dưới đây, biên dịch đầu tiên tốt, thứ hai nhận được lỗi khi cố đọc giá trị từ tmp, nhưng vì một số lý do gán giá trị cho tmp được cho phép. Tôi có thể hiểu nếu nó không thể đọc cũng không ghi vào biến kể từ khi tmp được khai báo sau khi initializer tĩnh, nhưng một lỗi trên chỉ có một trong những người không có ý nghĩa với tôi.
//Compiles Successfully:
public class Script
{
public static Object tmp;
static
{
tmp = new Object();
System.out.println(tmp);
}
}
//error only on the read but not the assignment
public class Script
{
static
{
tmp = new Object();
System.out.println(tmp);
}
public static Object tmp;
}
để nhấn mạnh thêm điểm, điều này sẽ biên dịch thành công.
public class Script
{
static
{
tmp = new Object();
}
public static Object tmp;
}
Tôi tin [câu trả lời cho một câu hỏi tương tự] [1] trả lời câu hỏi này tốt hơn tôi có thể. Đó là hành vi kỳ lạ nhưng không phải là lỗi. Nó đang làm những gì nó được cho là phải làm. [1]: http://stackoverflow.com/a/10035928/348975 – emory
Tôi không chắc chắn rằng nó có, khởi tạo tĩnh có để khởi tạo các biến từ giá trị mặc định của chúng. đó là để nói static int v = 1; tương đương với static int v; tĩnh {v = 1;} –
@Dukeling Tôi đã viết bình luận của tôi như là một câu trả lời và StackOverflow xác định câu trả lời của tôi là tầm thường (tôi nghĩ điều đó có nghĩa là quá ngắn) và tự động chuyển đổi nó thành một bình luận, nhưng rõ ràng flubbed các liên kết. – emory