private static voidshow() {
throw new UnsupportedOperationException(“拋出異?!?;
}
看下面這段代碼有什么問題?
10年積累的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)制作后付款的網(wǎng)站建設(shè)流程,更有興安免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
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,能隨便寫嗎,結(jié)合案例說一下?
public static void start(){
System.out.println("Java Exception");
}
public static void main(String args[]) {
try{
start();
}catch(IOException e){
e.printStackTrace();
}
}
- 上面的Java異常例子代碼中,編譯器將在處理IOException時報錯,因?yàn)镮OException是受檢查異常,而start方法并沒有拋出IOException,所以編譯器將拋出“異常,java.io.IOException不會在try語句體中拋出”,但是如果你將IOException改為Exception,編譯器報錯將消失,因?yàn)镋xception可以用來捕捉所有運(yùn)行時異常,這樣就不需要聲明拋出語句。我喜歡這樣帶有迷惑性的Java異常面試題,因?yàn)樗粫屓溯p易的找出是IOException還是Exception。你也可以在JoshuaBloach和NeilGafter的Java謎題中找到一些有關(guān)Java錯誤和異常的具有迷惑性問題。
捕獲異常時,為何在catch中要注意異常層級關(guān)系?需要注意哪些問題?
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”里拋出編譯異常錯誤。因?yàn)镋xception是RuntimeException的超類,在start方法中所有的RuntimeException會被第一個捕捉異常塊捕捉,這樣就無法到達(dá)第二個捕捉塊,這就是拋出“exception java.lang.RuntimeException has already been caught”的編譯錯誤原因。