異常處理java
1.不使用異常機制的弊端
01.代碼臃腫
02.程序員要花很大精力「堵漏洞」
03.程序員很難堵住全部「漏洞」
04.對代碼的修改極其不利程序員
2.異常機制
01. 異常
程序的運行過程當中所發生的不正常的事件,它會中斷正常運行的程序。
02.Java編程語言使用異常處理機制爲程序提供了錯誤處理的能力
程序中異常處理步驟:
001.程序中預先設置好對付異常的處理辦法
002.程序運行
003.異常
004.對異常進行處理
005.處理完畢,程序繼續運行 apache
3.Java的異常處理是經過5個關鍵字來實現
01.try
執行可能產生異常的代碼
02.catch
捕獲異常
03.finally
不管是否發生異常,代碼總能執行
04.throw
手動拋出異常
05.throws
聲明方法可能要拋出的各類異常
語法:
try{
//可能出現異常的代碼段
}catch(異常類型(Exception) ex){編程
//對異常進行處理的代碼段
}fanilly{
//代碼段
}
*異常是一種特殊的對象,類型爲java.lang.Exception或其子類數組
4.編譯器的異常拋出
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at Demo01.main(Demo01.java:7) app
01.Exception in thread "main" java.util.InputMismatchException
*拋出的是異常的類型
02.at Demo01.main(Demo01.java:7)
001.main:在此方法中拋出了異常
002.(Demo01.java:7):異常拋出的位置編程語言
5.異常類中經常使用的方法
01.printStackTrace()
拋出異常的內存堆棧信息及錯誤的位置
*輸出異常的堆棧信息
02.getMessage()
拋出異常信息
*返回異常信息描述字符串,是printStackTrace()輸出信息的一部分工具
6.常見的異常類型
01.Exception
異常層次結構的父類
02.ArithmeticException
算術錯誤情形,如以0做除數
03.ArrayIndexOutOfBoundsException
數組下標越界
04.NullPointerException
嘗試訪問null對象成員
05.ClassNotFoundException
不能加載所需的類
06.IllegalArgumentException
方法接收到非法參數
07.ClassCastException
對象強制類型轉換出錯
08.NumberFormatException
數字格式轉換異常,如把「abc」轉換成數字ui
7.Java中繼承的關係
01.Object(異常類的頂級父類)
001.Error(程序沒法處理的錯誤(非檢查異常))
002.Exception(程序可處理的異常)
0001.非查詢異常
00001.RuntimeException
00002.ArrayIndexOutOfBoundsException
00003.ArithmeticException
00004.NumberFormatException
00005.NullPointerException
0002.非運行異常(檢查異常)
00001.IOException
00002.EoFException
00003.FileNotFoundException
00004.SQLException
00005.ClassNotFoundException debug
8.生成異常語句
01.快捷方法
001.選中代碼
002.Alt + Shift + Z
02.手動
001.選中代碼
002.右鍵 → surround With → try(try catch block)
9.程序退出
01.System.exit()
001.帶參方法
參數爲0是程序正常退出
參數非0是程序強制退出(關閉Java虛擬機)
10.小結
01.try-catch塊中存在return語句,是否執行finally塊,若是執行,執行順序
執行順序:
try ---> catch ---> finally ---> return
02.try-catch-finally塊中,finally塊惟一不執行的狀況
使用System.exit()方法,由於會關閉Java虛擬機
11.總結
01.異常分爲Checked異常和運行時異常
001.Checked異常必須捕獲或者聲明拋出
002.運行時異常不要求必須捕獲或者成名拋出
02.try-catch-finally中存在return語句的執行順序
try ---> catch ---> finally ---> return
03.finally塊中語句不執行的狀況
出現了System.exit()語句!
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
異常日誌
1.throws(系統自動拋出異常)
01.語法
訪問修飾符 返回值類型 方法名() throws Exception{
}
02.聲明異常,拋給調用這處理。
*調用者必須使用try-catch進行處理
03.位置
方法名後面進行聲明異常,多個異常使用逗號隔開
2.throw(手動拋出異常)
01.語法:
throw new Exception(拋出的內容!!);
02.手動拋出異常處理方式
001.使用try-catch語句在方法中處理
002.使用throws拋給調用者,讓調用者使用try-catch語句處理異常
3.異常的分類
01.Throwable
001.Error
僅靠程序自己沒法恢復的嚴重錯誤
如:
0001.AWTError
0002.ThreadDeath
..........
002.Exception
由Java應用程序拋出和處理的非嚴重錯誤
0001.SQLException
0002.ClassNotFoundException
.......
*Checked異常,程序必須處理該類異常
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0001.RuntimeException(運行時異常,不要求程序必須作出處理)
00001.ArithmeticException(運行時異常)
00002.NullPointerException(空指針異常)
00003.NumberFormatException(格式轉換異常)
............
4.throw和throws的區別
01.throw
001.一次只能拋出一個異常
002.使用try-catch語句進行處理
02.throws
001.一次能夠拋出多個異常
002.處理方式
0001.使用try-catch語句進行處理
0002.使用throws拋給調用者,讓調用者使用try-catch語句處理異常
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
開源日誌記錄log4j工具
1.使用log4j記錄程序運行的過程,存儲起來,方便後期查看
2.日誌及分類
01.日誌(log)
主要用來記錄系統運行在一些重要操做信息,便於監視系統運行狀況,幫助用戶提早發現和避開可能出現的問題,或者出現問題後根據日誌找到緣由
02.日誌分類
SQL日誌、異常日誌、業務日誌
03.log4j時一個很是優秀的開源日誌記錄工具
001.控制日誌的輸出級別
002.控制日誌信息傳輸的目的地時控制檯、文件等
003.控制每一條日誌的輸出格式
3.使用log4j記錄日誌步驟
01.在項目中加入log4j的JAR文件
02.建立log4j.properties文件
03.配置日誌信息
04.使用log4j記錄日誌信息
4.詳細步驟
01.添加JAR包
001.提早準備好JAR包
002.在工程中選中相應的工程(右鍵)→Properties(選擇)→ Java Build Path(選擇)→ Libraries(選擇)→ Add External JARs....(選擇)→找到預先準備好的JAR包 → 打開 → OK
02.編寫Log4j代碼
001.右鍵添加file文件。
*文件名後綴名爲(properties)
*log4j中的註釋爲(##)
*添加到src目錄下
03.使用日誌文件
001.使用org.apache.log4j.Logger包下的Logger類
002.使用Logger類下的Info方法
04.示例
public class Test {
static Logger lo = Logger.getLogger(""); //logger類不能夠實例化
public static void main(String[] args) {
lo.info("1232"); //方法入參Object(Log4j寫入的內容)
}
}
05.Log4文j配置
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=本地路徑
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=info, stdout,file
*路徑須要修改成本地
5.log4j來源 4:for