Tôi đã chơi với một số mã để tạo cấu trúc "đóng như" (không hoạt động btw)Tại sao tôi có InstantiationException này trong Java khi truy cập các biến cục bộ cuối cùng?
Mọi thứ đều ổn nhưng khi tôi cố gắng truy cập biến cục bộ cuối cùng trong mã, ngoại lệ InstantiationException
bị ném.
Nếu tôi xóa quyền truy cập vào biến cục bộ bằng cách xóa hoàn toàn hoặc thay đổi thuộc tính lớp đó, không có ngoại lệ nào xảy ra.
Các doc nói: InstantiationException
Ném khi một ứng dụng cố gắng để tạo ra một thể hiện của một lớp học sử dụng phương pháp newInstance trong lớp Class, nhưng đối tượng lớp được chỉ định không thể được khởi tạo. Instantiation có thể thất bại vì nhiều lý do bao gồm nhưng không giới hạn:
- đối tượng lớp đại diện cho một lớp trừu tượng, một giao diện, một lớp mảng, một loại nguyên thủy, hoặc khoảng trống
- lớp không có hàm tạo nullary
Lý do nào khác có thể gây ra sự cố này?
Đây là mã. chú thích/bỏ ghi chú thuộc tính lớp/biến cục bộ để xem hiệu ứng (dòng: 5 và 10).
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class InstantiationExceptionDemo {
//static JTextField field = new JTextField();// works if uncommented
public static void main(String [] args) {
JFrame frame = new JFrame();
JButton button = new JButton("Click");
final JTextField field = new JTextField();// fails if uncommented
button.addActionListener(new _(){{
System.out.println("click " + field.getText());
}});
frame.add(field);
frame.add(button, BorderLayout.SOUTH);
frame.pack();frame.setVisible(true);
}
}
class _ implements ActionListener {
public void actionPerformed(ActionEvent e){
try {
this.getClass().newInstance();
} catch(InstantiationException ie){
throw new RuntimeException(ie);
} catch(IllegalAccessException ie){
throw new RuntimeException(ie);
}
}
}
Đây có phải là lỗi trong Java không?
chỉnh sửa
Ồ, tôi quên, stacktrace (khi ném) là:
Caused by: java.lang.InstantiationException: InstantiationExceptionDemo$1
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
at _.actionPerformed(InstantiationExceptionDemo.java:25)
dòng gì là ngoại lệ ném vào – Michael
25:. 'This.getClass() newInstance() ' – OscarRyz
@ Oscar: Tôi đang bối rối về cú pháp của bên trong vô danh Đây có phải là nhà xây dựng không? – Uri