Scanner物件的nextInt方法,可以將使用者輸入的下一個字串剖析為int值,如果出現InputMismatchException錯誤訊息,表示不符合Scanner物件預期,因為Scanner物件預期下一個字串本身要代表數字。
JVM會嘗試執行try區塊的程式碼,如果發生錯誤,執行流程會跳離錯誤發生點,然後比對catch中宣告的型態,是否符合被拋出的錯誤物件型態,如果是的話,就執行catch區塊的程式碼。
如果nextInt發生了InputMismatchException錯誤,執行流程就會跳到catch區塊,執行完catch區塊之後,由於還在while迴圈中,還可以繼續下一個迴圈流程。
Java在例外處理的設計上,並不鼓勵捕捉InputMismatchException並重新恢復執行流程,這跟例外繼承架構有關。
簡單來說,API 設計者在System.in.read的實作中,某些條件成立時會引發錯誤,而且認為呼叫System.in.read方法的客戶端有能力處理錯誤,要求編譯器提醒客戶端必須明確處理錯誤,不然不可通過編譯。