第五章 异常
1.异常
异常是在程序的运行过程中所发生的不正常事件,异常会中断正在运行的程序
2. 异常处理(关键字)
-
捕获异常(try,catch,finally)
try{ //可能发生异常的代码 }catch(异常类型){ //异常提示 }finally{ //结束 不管如何都会执行的语句 }
- 异常类型与所发生的异常不匹配,则会直接终止程序。
- catch /try 中有 return(终止程序) 时,执行完return 前的代码,先执行 finally 后返回来执行return。
- 如果是 return 0 (返回值),则finally 里的会直接覆盖其他代码块中的。
-
声明异常(throws)
//声明这个方法可能有异常 public void num() throws Exception{ //声明异常,多个异常可用“,”隔开 //代码块 }
调用时会报错,解决方法
- 处理(用try-catch)
- 往上抛
-
抛出异常(throw)
//手动抛出异常 throw new Exception("......");
手动抛出异常的所在方法需声明异常/直接处理(用try-catch)
3.异常类型
异常 | 说明 |
---|---|
Exception | 异常层次结构的根类 |
ArithmeticException | 算数错误形式,如以零作除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问null对象成员 |
ClassNotFoundException | 不能加载所需的类 |
InputMismatchException | 欲得到的数据类型与实际输入的类型不匹配 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式转换异常,如把“abc”转换成数字 |
4.多重catch块
try{ }catch(//异常类型){ }catch(//异常类型){ }
-
顺后序:先子类后父类
-
发生异常时逐个匹配
-
只执行第一个与异常类型匹配成功的catch语句
5. log4j 日志
//设置Logger输出级别和目的地 log4j.rootLogger=, stdout,logfile //把日志输出到控制台上 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.err log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%l %F %p %m%n //把日志输出到文件上 log4j.appender.logfile=org.apache.log4j.FileAppender log4j.appender.logfile.File=chapter5.log 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
-
在项目中加入log4j 的JAR文件
-
创建log4j.properties文件
-
配置日志信息
-
输出级别
fatal>error>warn>info>debug
日志记录器将只输出那些级别高于或等于它的信息
-
日志输出目的地Appender
ConsoleAppender:输出日志事件到控制台(stdout)
FileAppender:输出日志事件到一个文件(logfile)
-
日志布局类型Layout
HTMLLayout:HTML表格
SimpleLayout:级别Level——日志消息
PatternLayout:根据指定的转换模式格式化日志输出,需要配置layout.ConversionPattern,否则使用默认转换模式(stdout,logfile)
-
转换模式ConversionPattern
%d:输出日期和时间(%d{yyyy-MM-dd})
%m:输出代码中指定的消息
%n:输出一个回车换行符
%l:输出日志事件发生的位置(包括类名、发生的线程、以及在代码中的行数)
%P:输出优先级
%F:输出文件名
%M:输出方法名
-
-
使用log4j记录日志信息