標籤:return語句 運行 message 手動 就是 pen throw font 設定
Java的異常
1.Java中所有異常和錯誤的基類:Throwable
Throwable
error Exception
(檢查時異常)(運行時異常)
RuntimeException
2.Java中的異常分為運行時異常和檢查時異常
運行時異常是表示RuntimeException以及所有子類,這些異常無需再程式中捕獲,大多可以通過代碼進行控制避免
檢查時異常:除了RuntimeException以及其所有子類之外的所有異常,這些異常必須在程式中進行捕獲處理。
異常的第一種處理機制——使用try-catch進行異常捕獲
1.使用try塊包裹可能出現異常的代碼,使用多個catch塊進行不同異常的處理
當try塊中的程式出現異常時,將進入對應的catch塊進行操作,而不再執行try塊中的代碼
使用try—catch捕獲異常後,如果程式出現異常,將不會阻斷程式的運行
2。catch塊可以有多個,一般最後用catch(Exception e)收尾,表示捕獲所有異常
但多個catch塊順序必須由小到大
3.e.getMessage():拿到錯誤資訊
e.printStackTrace(); 列印堆棧資訊
4.try catch結構如果需要確保程式不被中斷,必須確保程式塊可以捕獲程式中可能出現的所有異常(最後用catch(Exception e)收尾)
5.finally表示無論程式是否出現異常,都必須執行的語句,即便try塊中有return語句也必須執行完finally才能結束當前方法。
但是使用System.exit(0);退出程式,將不再執行finally的語句
所以,finally通常用於進行流的關閉,資源釋放等操作
6.try-finally可以組合存在,而不一定必須包含catch
表示出現異常不進行操作,但是finally中的代碼必須執行
異常的第二種處理機制——拋出機制
1.在方法體中如果出現異常,可以不用try-catch捕獲,而使用throws在方法聲明上進行拋出
拋出後,在調用方法的地方進行拋出,如果捕獲可以繼續拋出
原則上,main方法中必須進行異常處理,如果繼續拋出將會導致程式出現異常而無法發現
2.throws如果拋出多個異常,可以使用逗號分隔
3.throw 在程式中手動拋出異常
throw new IOException("輸入年齡不合法");
4.如果使用throw拋出的是一個檢查型異常,那必須在方法體上使用throws進行拋出聲明
如果使用throw拋出的是一個運行時異常,那麼不必再使用throws進行拋出聲明。
執行個體代碼:
try { setAge(110);} catch (IOException e) { e.printStackTrace();}public static void setAge(int i) throws IOException{ if(i<0||i>100){ throw new IOException("輸入年齡不合法"); }}
如何自訂異常類
自訂異常類,必須繼承現有異常類。
通常繼承Exception或者RuntimeException,分別表示聲明了一個檢查時異常和一個運行時異常。
執行個體代碼:
class AgeException extends Exception{ private String message=null; public AgeException(){ } public AgeException(String message){ this.message=message; } public String getMessage(){ return message; }}class AgeRuntimeException extends RuntimeException{ private String message=null; public AgeRuntimeException(){ } public AgeRuntimeException(String message){ this.message=message; } public String getMessage(){ return message; }}
log4j的使用
1.匯入log4j-1.2.17.jar
2.在src目錄同級下,建立log4j.properties設定檔
3.在需要列印日誌的類中通過Logger.getLogger()拿到一個日誌對象,參數傳入本類.class
4.使用日誌對象,分別調用不同層級的列印語句進行日誌的輸出!
log.debug("列印一條debug資訊");
log.info("列印一條info資訊");
log.warn("列印一條warn資訊");
log.error("列印一條error資訊");
log4j的設定檔log4j.properties
#log4j.rootLogger 表示根配置。#log4j.rootLogger = [ level ] , appenderName1 , appenderName2#level 表示可以寫入日誌的層級:#ERROR > WARN > INFO > DEBUG #設定info 表示層級大於info的都可以進行日誌輸出# 層級後面的多個選項,表示多個適配器的名字,適配器的名字可以隨便起log4j.rootLogger=info, logfile,A,B# 進行各個適配器的配置。 log4j.appender.適配器名字#[為Appender指定日誌輸出目的地]#org.apache.log4j.ConsoleAppender(控制台),#org.apache.log4j.FileAppender(檔案),#org.apache.log4j.DailyRollingFileAppender(每天產生一個記錄檔),#org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案)log4j.appender.A=org.apache.log4j.ConsoleAppender# 設定控制台列印的語句。 System.out/System.errlog4j.appender.A.Target=System.err# 使用哪種布局進行日誌顯示:# org.apache.log4j.HTMLLayout(以HTML表格形式布局),# org.apache.log4j.PatternLayout(可以靈活地指定配置模式),# org.apache.log4j.SimpleLayout(包含日誌資訊的層級和資訊字串),#org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等資訊)log4j.appender.A.layout=org.apache.log4j.SimpleLayoutlog4j.appender.logfile=org.apache.log4j.FileAppender# 設定檔案的地址log4j.appender.logfile.File=mylog.loglog4j.appender.logfile.layout=org.apache.log4j.PatternLayout# 為PatternLayout進行樣式的設定。# %m 輸出代碼中指定的訊息# %p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL # %r 輸出自應用啟動到輸出該log資訊耗費的毫秒數 # %c 輸出所屬的類目,通常就是所在類的全名 # %t 輸出產生該日誌事件的線程名 # %n 輸出一個斷行符號分行符號,Windows平台為“\r\n”,Unix平台為“\n” # %d 輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},輸出類似:2002年10月18日 22 : 10 : 28 , 921 # %l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java: 10 ) log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %F %p %m%n# 為當前適配器,指定單獨的層級,可以覆蓋rootLogger的配置log4j.appender.logfile.Threshold = warn# 表示寫入新日誌時,是否清空記錄檔;false表示清空原檔案,true表示在原檔案後面追加新日誌log4j.appender.logfile.Append = false
JAVA中的異常處理及日誌(log4j為例)的使用