异常处理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