2013-04-12 26 views
21

Ví dụ:Java: Không ném một ngoại lệ giết phương pháp của nó?

public String showMsg(String msg) throws Exception { 
    if(msg == null) { 
     throw new Exception("Message is null"); 
    } 
    //Create message anyways and return it 
    return "DEFAULT MESSAGE"; 
} 

String msg = null; 
try { 
    msg = showMsg(null); 
} catch (Exception e) { 
    //I just want to ignore this right now. 
} 
System.out.println(msg); //Will this equal DEFAULT MESSAGE or null? 

Tôi cần phải về cơ bản bỏ qua trường hợp ngoại lệ trong trường hợp nhất định (thường là khi nhiều trường hợp ngoại lệ có thể được ném từ một phương pháp và một không quan trọng trong một trường hợp cụ thể) nên dù ví dụ thảm hại mà tôi sử dụng cho sự đơn giản sẽ trở lại trong showMsg vẫn chạy hoặc không ném thực sự trở lại phương pháp?

+3

Mã của bạn đã cho bạn biết những gì xảy ra. –

+1

Tránh ném các trường hợp ngoại lệ 'mới', nó sẽ mất ngăn xếp cuộc gọi. –

+0

@jahroy tôi không nghĩ như vậy, cuối cùng các khối chạy ngay cả sau khi ngoại lệ –

Trả lời

34

Tuyên bố return sẽ không chạy nếu ngoại lệ được ném. Việc ném một ngoại lệ làm cho luồng điều khiển của chương trình của bạn đi ngay lập tức tới trình xử lý của ngoại lệ (*), bỏ qua bất kỳ thứ gì khác trong đường đi. Vì vậy, cụ thể msg sẽ là null trong bản in của bạn nếu một ngoại lệ được ném bởi showMsg.

(*) Ngoại trừ các tuyên bố trong các khối finally sẽ chạy, nhưng điều đó không thực sự có liên quan ở đây.

+5

Một _exception_ khác với quy tắc (không có ý định chơi chữ) sẽ là nếu phương thức được đề cập _catches_ ngoại lệ. Bạn _can_ một cách rõ ràng ném một ngoại lệ trong một khối thử và bắt nó trong khối catch tương ứng. Điều đó đang được nói, câu trả lời của bạn có thể bao gồm kịch bản này với sự lựa chọn của bạn của các từ: "_... gây ra dòng điều khiển để đi ngay lập tức để xử lý ngoại lệ của ** ** **". – jahroy

Các vấn đề liên quan