2014-11-05 141 views
-2

所以我有一個簡單的類叫Date有3個數據成員和一個單獨的類Driver;並且我試圖在我的設置類Date的方法中用try-catch塊錯誤地檢查輸入。使用try-catch塊的問題

public void setDate(int month, int day, int year) 
{ 
    try 
    { 
     dMonth = month; 
     dDay = day; 
     dYear = year; 
    } 
    catch (InputMismatchException imeR) 
    { 
     System.out.println("Wrong input type"); 
    } 
} 

但是,當我編譯類Drive ...

public class Driver 
{ 
    public static void main (String[] args) 
    { 
     Date zeroDate = new Date(); 

     System.out.println(zeroDate.getMonth()); 
     zeroDate.setDate(4,4,4); 
     System.out.println(zeroDate.getMonth()); 
     zeroDate.setDate(4,4,"string"); 
    } 
} 

...,我得到以下錯誤:

Driver.java:14: error: incompatible types: String cannot be converted to int 
     zeroDate.setDate(4,4,"ted"); 

其他一切工作正常,當我發表評論出線...

zeroDate.setDate(4,4,"string"); 

...,我可以操縱類日期就好了。

這是我第一次嘗試try-catch塊。有人可以解釋我缺少的東西嗎?

在你的setDate方法
+0

Java不會自動將'String'轉換爲'int'。你必須使用一種方法來做到這一點。在'Integer'類中有一些方法可以爲你做到這一點。類文檔位於[此鏈接](http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html)。還要注意,調用你的解析方法的方法是你必須放置catch的方法。 'setDate'只是移動'int'而不做任何解析,所以把'catch'塊放在那裏是錯誤的。 – ajb 2014-11-05 02:02:35

回答

3

這不是在try-catch塊。這是因爲你傳遞了一個字符串,其中int是預期的。 由於Java是靜態類型的,因此它不會讓您在編譯時執行此操作。

+3

爲了展開,'try ... catch'語句只會捕獲運行時錯誤。正如你所說,類型檢查是在編譯時完成的 – 2014-11-05 01:40:24