2015-01-09 414 views
1

我剛開始學習java。我想學習如何異常處理的工作,是使我編了一個小程序:拋出異常不拋出

public class Car { 
    protected String type; 
    protected String[] colors; 
    protected boolean isAvaiable; 

    public Car(String type, Collection<String> colors, boolean isAvaiable) throws NoColorException { 
     if (colors == null || colors.isEmpty()) { 
      throw new NoColorException("No colours!"); 
     } else { 
      this.type = type; 
      this.colors = (String[]) colors.toArray(); 
      this.isAvaiable = isAvaiable; 
     } 
    } 

    public static void main(String[] args) { 
     try { 
      Car n = new Car("asd", new ArrayList(), true); 
     } catch (NoColorException ex) { 

     } 
    } 
} 

這是我的異常類:

public class NoColorException extends Exception { 
    public NoColorException(String string) { 
     super(string); 
    } 
} 

上面的代碼,當我嘗試創建應該拋出一個異常該對象,但它運行。

這是爲什麼發生?

任何幫助,非常感謝。

回答

4

你捕獲異常,如果異常被逮住什麼都不做:

變化:

try { 
    Car n = new Car("asd", new ArrayList(), true); 
} catch (NoColorException ex) { 

} 

收件人:

try { 
    Car n = new Car("asd", new ArrayList(), true); 
} catch (NoColorException ex) { 
    System.out.println(ex.getMessage()) 
} 

,你會看到異常。

注意:Neven在沒有記錄的情況下捕捉異常。

6

您的代碼拋出一個異常,你可以在你的空catch塊趕上:

catch (NoColorException ex) { 

} 
-1

它的運行很清晰,因爲您正在捕獲由@Eran和@Jens所說的Empty catch中拋出的Exception。

爲了看到紅色的文字;即拋出異常並將異常流程可視化,只需進行以下更改:

public static void main(String[] args) throws NoColorException { 

     Car n = new Car("asd", new ArrayList(), true); 
} 
+0

@ l4mpi爲什麼它不會編譯..?這是main()方法,所以編譯器只會提醒你事件 –

+0

@ l4mpi沒有IDE會抱怨它 –

+0

糟糕,我錯過了「拋出」聲明。但是,「爲了看到紅色的文本」部分是完全無意義的,並且100%依賴於執行環境。 – l4mpi