2013-04-04 14 views
8

Tôi nhận được ngoại lệ không được báo cáo khi tôi chạy sau mãTại sao tôi nhận được ngoại lệ không được báo cáo khi hàm tạo mặc định của lớp siêu có mệnh đề 'ném'?

Mã của tôi là như hình dưới đây

class Super {  
    public Super() throws Exception {  
    System.out.println("Super Class");  
    }  
} 

public class Sub extends Super {  
    public static void main(String[] args) throws Exception {  
    Sub s = new Sub();  
    }  
} 

lỗi sau có: Sub.java:6: java.lang.Exception ngoại lệ không được báo cáo trong constructor mặc định
public class Sub mở rộng Siêu {
1 lỗi

Trả lời

10

Bạn chưa xác định một constructor mặc định cho Sub, và Super được báo cáo một ngoại lệ kiểm tra. Để khắc phục, hãy thêm hàm tạo này vào Sub:

public Sub() throws Exception { 
    super(); 
} 
+0

Cảm ơn bạn đã gửi kết quả –

+2

Không phải là vấn đề lớn, nhưng bạn không cần lệnh gọi rõ ràng đến super() - trình biên dịch tự động thực hiện điều này. – acvcu

2

Eclipse đang báo cáo mã bên dưới và từ chối biên dịch mã.

Trình tạo mặc định không thể xử lý loại ngoại lệ Ngoại lệ được ném bởi hàm tạo siêu ngầm. Phải xác định một hàm tạo rõ ràng

Vì vậy, bạn phải xác định rõ ràng một hàm tạo.

2

Tất cả hàm tạo mặc định của lớp mặc định gọi hàm tạo mặc định của lớp siêu. Bây giờ, khi hàm tạo của lớp siêu của bạn ném ra một ngoại lệ, khi hàm tạo lớp con gọi hàm tạo của lớp siêu, nó cần xử lý ngoại lệ hoặc ném nó.
Bây giờ trong lớp bạn chưa đề cập đến bất kỳ hàm tạo nào, trình biên dịch sẽ tạo một hàm tạo mặc định và sẽ gọi super(), vì super() ném ngoại lệ và hàm tạo của bạn không ném/xử lý bất kỳ ngoại lệ nào, nó sẽ không biên dịch được.

2

Tôi đồng ý với Jalynn2. Một giải pháp khác là làm cho Exception thành RuntimeException khi bạn không nâng cấp bất cứ điều gì đặc biệt trong hàm tạo này.

class Super { 
    public Super() throws RuntimeException {  
    System.out.println("Super Class");  
    } 
} 
Các vấn đề liên quan