异常处理
1.不使用异常机制的弊端
01.代码臃肿
02.程序员要花很大精力“堵漏洞”
03.程序员很难堵住所有“漏洞”
04.对代码的修改极其不利
2.异常机制
01. 异常
程序的运行过程中所发生的不正常的事件,它会中断正常运行的程序。
02.Java编程语言使用异常处理机制为程序提供了错误处理的能力
程序中异常处理步骤:
001.程序中预先设置好对付异常的处理办法
002.程序运行
003.异常
004.对异常进行处理
005.处理完毕,程序继续运行
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)
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”转换成数字
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
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