JAVA中的異常處理及日誌(log4j為例)的使用

來源:互聯網
上載者:User

標籤: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為例)的使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.