之前一篇已經描述了如何在工作中處理一些突如其來的錯誤——異常,但是大王應該還是不會滿意的,決策者的時間是很寶貴的,匯報的時候應該有針對性,要總結,不能亂七八糟的就把問題拋給大王,所以刑部連夜加班,修改制度流程如下:
import java.util.Scanner;//導入用于獲取控制臺輸入的類Scannerpublic class ExceptionDemo {//異常演示的例子 public static void main(String[] args) { while(true){ //使用無限循環模擬永遠在線等待指令的場景 Scanner sc = new Scanner(System.in); System.out.此時,刑部響應大王指令的過程如下:大王,我們刑部這次要除掉哪個奸臣:0大王,搞定,我們在搞掉【0】時遇到了算術問題,任務失敗大王,之前0事情都過去了,您看還有需要什么要指示的嗎?大王,我們刑部這次要除掉哪個奸臣:張三大王,搞定,我們在搞掉【張三】時遇到了字符串轉換問題,任務失敗大王,之前張三事情都過去了,您看還有需要什么要指示的嗎?大王,我們刑部這次要除掉哪個奸臣:這下,問題經過整理后拋出,便于決策者分析。那么常見的有哪些問題呢(異常)。 剛剛上文提到的兩種是非常好理解的,ArithmeticException 是數學計算異常,NumberFormatException是 數字轉換格式異常。好的,平時常用的異常稍微總結下:
NullPointerException:空指向異常,如果一個對象沒new 直接使用,所以引用沒有指向堆的地址,所以引用沒有意義啊,那是要報錯的。ArrayIndexOutOfBoundsException:數組下標越界,這個好理解。EOFException:文件已結束。FileNotFoundException:文件未找到。SQLException:數據庫異常NoSuchMethodException:方法未找到ClassNotFoundException:找不到類異常好的,不管Java中提供了多少種未定義的異常,總有它想不到的或者是我們想設置的,比如,如果大王自己規定,人名不能是負數,這種要算大王糊涂錯誤,那怎么處理呢,不要緊,可以自定義異常。如下自定義一個異常類:
public class MinusException extends Exception{//自定義異常類,因為繼承了Exception類,所以成為了異常家族的一員 public MinusException(String message)//構造函數,包含一條消息 { super(message); } }好的,這樣使用即可:
import java.util.Scanner;//導入用于獲取控制臺輸入的類Scannerpublic class ExceptionDemo {//異常演示的例子 public static void main(String[] args) { while(true){ //使用無限循環模擬永遠在線等待指令的場景 Scanner sc = new Scanner(System.in); System.out.println("大王,我們刑部這次要除掉哪個奸臣:"); String command = sc.nextLine();//模擬獲取大王指令 int army=100;//總兵力 try{//可能有錯誤的語句放在try里面 int commandInt=Integer.parseInt(command);//理解大王旨意,軍機處比較傻,只能理解數字 int result=army/commandInt; if(result<0) throw new MinusException("負數錯誤,負數為:"+commandInt); System.out.println("大王,搞定,我們除掉【"+commandInt+"】了!");//模擬響應用戶指令 } catch(MinusException exMinus){ System.out.println("大王,搞定,我們在搞掉【"+command+"】時遇到了"+exMinus.getMessage()); } catch(ArithmeticException exArithmetic){ System.out.println("大王,搞定,我們在搞掉【"+command+"】時遇到了算術問題,任務失敗"); } catch(NumberFormatException exNumber){ System.out.println("大王,搞定,我們在搞掉【"+command+"】時遇到了字符串轉換問題,任務失敗"); } catch(Exception ex){ System.out.println("大王,我們遇到問題了:"+ex.getMessage()); ex.printStackTrace(); }finally{ System.out.println("大王,之前"+command+"事情都過去了,您看還有需要什么要指示的嗎?"); } } }}大王看到這個報告,終于露出了會心的笑容:小子們,你們的路還長著呢,嘿嘿嘿嘿
大王,我們刑部這次要除掉哪個奸臣:-1大王,搞定,我們在搞掉【-1】時遇到了負數錯誤,負數為:-1大王,之前-1事情都過去了,您看還有需要什么要指示的嗎?大王,我們刑部這次要除掉哪個奸臣:新聞熱點
疑難解答