2015-12-17 129 views
-3

我有以下代碼,它給我一個編譯錯誤。避免編譯錯誤?

// PROGRAM1 - 編譯錯誤

public class ExceptionExample { 
    public static void main(String[] a) { 
     try { 
      method(); 
     } catch (ClassCastException p) {} catch (Exception e) { 
      System.out.println(" Exception"); 
     } 
    } 
    public static void method() { 
     try { 
      throw new NullPointerException(); 
     } finally { 
      System.out.println("Hello"); 
     } 
     System.out.println("Hi"); 
    } 
} 

但是,下面的代碼工作後,我加了一些catch塊。

//計劃2 - 沒有編譯錯誤

public class ExceptionExample { 
    public static void main(String[] a) { 
     try { 
      method(); 
     } catch (ClassCastException p) { 

     } catch (Exception e) { 
      System.out.println(" Exception"); 
     } 
    } 
    public static void method() { 
     try { 
      throw new NullPointerException(); 
     } 

     // Below catch block has been added 
     catch (ClassCastException p) { 

     } 

     finally { 
      System.out.println("Hello"); 
     } 
     System.out.println("Hi"); 
    } 
} 

/////////////////////////// ////////////////////////////////// 「System.out.println(」Hi「);無法到達的代碼「 我在想,如何添加不必要的catch塊來解決我的問題?

+3

歡迎來到StackOverflow!爲了幫助您獲得回覆,請詳細說明您想要回答的問題。您可以閱讀[this](http://stackoverflow.com/help/how-to-ask)以獲取有關如何提出最佳問題的信息。 – ricky3350

+0

你錯過了最重要的信息 - 你收到了什麼實際的編譯錯誤,錯誤信息是什麼? –

+0

「System.out.println(」Hi「);」無法到達的代碼 –

回答

0

因爲在程序1中,編譯器確信執行流程永遠不會到達「System.out.println(」Hi「);」因爲既沒有catch塊嘗試,也不一定條件 拋出聲明,

您也可避免這個錯誤與可變寫一些條件throw語句這樣

 int a =0; 

     if(a==0) 
     throw new NullPointerException(); 

在程序2,當然catch塊永遠不會執行,但編譯器假定有特定的catch來嘗試處理並停止拋出錯誤。