什么是异常?
指程序在运行过程中发生的不正常事件,他会中断程序运行
打印错误信息语句:
System.err.println("");
系统强制退出:
System.exit(1);
异常的关键字:
try 执行可能产生异常的代码
catch 捕获异常
finally 无论是否出现异常,都会执行代码
throw 抛出异常
throws 声明可能抛出的异常
处理异常的步骤:
1、在可能发生异常的地方进行设置try
2、出现异常需要用catch进行捕获处理
3、finally一定会执行,可写可不写
异常产生的过程:
1、程序出现错误会自动生成一个异常对象
2、使用try-catch捕获时自动匹配出现的异常类型
3、根据不同的异常类型进入相应的代码块
语法:try{
//可能产生异常代码
}eatch(异常类型 异常对象){
//处理异常的代码块
}
Exception:所有的异常类型,所有异常的父类
使用try-catch:捕获异常的几种情况:
1、正常执行
在try里面的代码执行完毕后,不执行catch
2、异常情况
在try里面出现错误,直接进入catch代码块处理,处理后继续执行
3、异常类型不匹配
在try里面出现的错误,直接匹配catch直接匹配代码块类型,如果类型未匹配,程序中断
异常报错类型:
Exception 异常层次结构的父类
ArithmeticException 算数错误情形,如以零件除数
ArraylndexOutOfBoundsException 数组下标越界
NullPointerException 尝试访问null大小成员
ClassNotFoundException 不能加载所需要的类
IllegalArgumentException 方法接收到非法参数
ClassCastException 对象强制类型转换出错
NumberFormatException 数字格式转换异常,如果把“abc”转换为数字
try-catch-finally:
语法:try{}catch{}finally{ //无论是否异常,都执行}
不执行的唯一情况:
使用System.exit(1);//程序中断,退出Java虚拟机
在try-catch中return代码中:
1、finally始终会执行
2、先执行catch块,在执行finally块,但是return后面的代码不会执行
3、未出现异常,会执行finally,但是return后面的代码不会执行
4、先执行finally,在执行return
多重catch块的作用:
1、先添加子类异常,在添加父类异常
2、只会匹配一个异常类型,匹配到不在执行其他的catch
3、按顺序进行匹配,从上到下
e.printStackTrace();打印堆栈信息 确定那一行出现错误
在方法中处理异常:
1、在可能出现异常的方法后面声明throws和异常类型(代表可能有异常发生)
2、只要进行声明了异常,使用时必须对此异常进行处理(1、捕获try-catch 2、继续声明异常)
3、一般遇到异常直接进行try-catch处理,不推荐声明
在方法中进行手动声明异常并处理:
1、判断需要(设置)发生异常的条件
2、进行手动声明异常throws new Exception("");
3、对声明的异常进行处理(1、捕获try-catch 2、继续声明异常)
自定义异常类:
1、继承throwable、Exception、RuntimeException类的任意一个
2、在自定义异常类中定义构造方法,使用super("")设置异常类信息
3、在需要声明手动抛出异常的地方thow new 自定义异常类();
使用log4j进行日志记录:
1、给项目添加上log4j.jar文件(复制到项目中右键build path ==》add build path)
2、进行日志文件配置log4j.properties
3、对需要进行记录的代码块添加logger对象 Logger loggle=Logger.getLogger(类名.class);
4、给需要记录的步骤进行记录。 例如:loggle.debug(); loggle.error(); 等
日志共分为4个等级(从大到小):
1、debug
2、info
3、warn
4、error
5、fatal
日志文件log4j.properties配置信息:
1、在控制台输入
2、在文件中输入
1)输入等级
log4j.rootLogger=debug,stdout,logfile
2)输出目的地(文件名)
log4j.appender.logfile=org.apache.log4j.FileAppender (目的地)
log4j.appender.logfile.File=jbit.log (文件名)
3)输出的格式
灵活的布局方式
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
格式
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%l%F%p%m%n
%d:时间格式
%l:执行的代码行
%F:文件名
%p:输出的等级信息
%m%n:换行输出日志信息