您好,登錄后才能下訂單哦!
private static voidshow() {
throw new UnsupportedOperationException(“拋出異常”);
}
看下面這段代碼有什么問題?
public class SuperClass {
public void start() throws IOException{
throw new IOException("Not able to open file");
}
}
public class SubClass extends SuperClass{
public void start() throws Exception{
throw new Exception("Not able to start");
}
}
針對拋異常是IOException還是Exception,能隨便寫嗎,結合案例說一下?
public static void start(){
System.out.println("Java Exception");
}
public static void main(String args[]) {
try{
start();
}catch(IOException e){
e.printStackTrace();
}
}
- 上面的Java異常例子代碼中,編譯器將在處理IOException時報錯,因為IOException是受檢查異常,而start方法并沒有拋出IOException,所以編譯器將拋出“異常,java.io.IOException不會在try語句體中拋出”,但是如果你將IOException改為Exception,編譯器報錯將消失,因為Exception可以用來捕捉所有運行時異常,這樣就不需要聲明拋出語句。我喜歡這樣帶有迷惑性的Java異常面試題,因為它不會讓人輕易的找出是IOException還是Exception。你也可以在JoshuaBloach和NeilGafter的Java謎題中找到一些有關Java錯誤和異常的具有迷惑性問題。
捕獲異常時,為何在catch中要注意異常層級關系?需要注意哪些問題?
public static void start() throws IOException, RuntimeException{
throw new RuntimeException("Not able to Start");
}
public static void main(String args[]) {
try {
start();
} catch (Exception e) {
e.printStackTrace();
} catch (RuntimeException e2) {
e2.printStackTrace();
}
}
- 這段代碼會在捕捉異常代碼塊的RuntimeException類型變量“e2”里拋出編譯異常錯誤。因為Exception是RuntimeException的超類,在start方法中所有的RuntimeException會被第一個捕捉異常塊捕捉,這樣就無法到達第二個捕捉塊,這就是拋出“exception java.lang.RuntimeException has already been caught”的編譯錯誤原因。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。