Sau đây không biên dịch, đưa ra một 'bất hợp pháp mong tham khảo' thông điệp:Tại sao hai chương trình có lỗi tham chiếu về phía trước trong khi chương trình thứ ba thì không?
class StaticInitialisation {
static
{
System.out.println("Test string is: " + testString);
}
private static String testString;
public static void main(String args[]) {
new StaticInitialisation();
}
}
Tuy nhiên, sau đây không biên dịch:
class InstanceInitialisation1 {
{
System.out.println("Test string is: " + this.testString);
}
private String testString;
public static void main(String args[]) {
new InstanceInitialisation1();
}
}
Nhưng sau đây không biên dịch, đưa ra một 'về phía trước bất hợp pháp tham chiếu 'message:
class InstanceInitialisation2 {
private String testString1;
{
testString1 = testString2;
}
private String testString2;
public static void main(String args[]) {
new InstanceInitialisation2();
}
}
Tại sao StaticInitialisation và InstanceInitialisation2 không biên dịch, trong khi InstanceInitialisation1 doe S?
Xem Đoạn thứ 3 sẽ làm việc nếu thay đổi cho 'testString1 = this.testString2;' – Eran
của nó lần đầu tiên tôi thấy một khối mã trong một lớp Java đó không phải là một phần của một ctor, hoặc ctor tĩnh hoặc phương thức. rất thích biết nó là gì, làm thế nào nó đi qua biên dịch và khi nào nó được thực thi –
@sharonbn: Chúng là các khởi tạo thể hiện hoặc các khởi tạo tĩnh, được mô tả trong phần 8.6 và 8.7 của JLS tương ứng. –