1.10.1 什么是异常
异常 :指的是程序在执行过程中,出现的不正常的情况,最终会导致JVM的非正常停止。
在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。
异常指的并不是语法错误。
语法错了,编译不通过,不会产生字节码文件,根本不能运行。
1.10.2 异常的体系
异常机制其实是帮助我们找到程序中的问题,异常的根类是java.lang.Throwable
,其下有两个子类:java.lang.Error
与java.lang.Exception
,平常所说的异常指java.lang.Exception
。
-
Error:严重错误Error,无法通过处理的错误,只能事先避免,好比绝症。
-
Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的。好比感冒。
1.10.3 异常的分类
异常(Exception)的分类:根据在编译时期还是运行时期去检查异常?
-
编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式化异常),又称受检异常。
-
运行时期异常:runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)。(如数学异常),又称非受检异常。
1.10.4 异常的处理
1.10.4.1 try-catch方式处理异常
格式
try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
}
1.10.4.2 throws方式处理异常
throws方式处理异常 又称声明异常,将问题标识出来,报告给调用者。
如果方法内通过throw抛出了编译时异常,而没有捕获处理(稍后讲解该方式),那么必须通过throws进行声明,让调用者去处理。
关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常).
格式
修饰符 返回值类型 方法名() throws 异常类名 {
}
1.10.5 finally 代码块
有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。
1.10.5.1
1.10.5.1.1
int num=0;
try{
num++;
return num;
}catch(Exception e){
//do nothing
} finally{
num++;
}
return num;
}
//输出结果:num=2
什么时候的代码必须最终执行?
当我们在try语句块中打开了一些物理资源(磁盘文件/网络连接/数据库连接等),我们都得在使用完之后,最终关闭打开的资源
try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
} finally{
释放资源
}
1.10.6 Log4J
开发阶段发现程序的问题 , 排除错误 , 产品阶段 , 可以记录系统运行的一些状态信息 , 程序运行的状态 。
Log4J是目前最流行的java开源日志处理框架 。
1.10.6.1 日志分类
诊断日志、统计日志、审计日志
1.10.6.2 日志级别
级别(由高到低) | 说明 |
OFF | 最高等级的,用于关闭所有日志记录。 |
FATAL | 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。 |
ERROR | ERROR 级别主要针对于一些不可预知的信息,诸如:错误、异常等,比如,在 catch 块中抓获的网络通信、数据库连接等异常,若异常对系统的整个流程影响不大,可以使用 WARN 级别日志输出。在输出 ERROR 级别的日志时,尽量多地输出方法入参数、方法执行过程中产生的对象等数据,在带有错误、异常对象的数据时,需要将该对象一并输出 |
WARN | WARN 级别的主要输出警告性质的内容,这些内容是可以预知且是有规划的,比如,某个方法入参为空或者该参数的值不满足运行该方法的条件时。在 WARN 级别的时应输出较为详尽的信息,以便于事后对日志进行分析 |
INFO | INFO日志主要记录系统关键信息,旨在保留系统正常工作期间关键运行指标,开发人员可以将初始化系统配置、业务状态变化信息,或者用户业务流程中的核心处理记录到INFO日志中,方便日常运维工作以及错误回溯时上下文场景复现。建议在项目完成后,在测试环境将日志级别调成 INFO,然后通过 INFO 级别的信息看看是否能了解这个应用的运用情况,如果出现问题后是否这些日志能否提供有用的排查问题的信息。 |
DEBUG | DEUBG 级别的主要输出调试性质的内容,该级别日志主要用于在开发、测试阶段输出。该级别的日志应尽可能地详尽,便于在开发、测试阶段出现问题或者异常时,对其进行分析。 |
TRACE | 很低的日志级别,一般不会使用。 |
ALL | 最低等级的,用于打开所有日志记录。 |
注意
如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。
例如,如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,而INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
Log4J的默认级别为:ERROR
上一篇:1.9Java-API、Object类... |
下一篇:1.11Java-数据结构 |