一、错误处理
(一) java的异常
1、Java 使用异常来表示错误:
(1)异常是一种类 class;
(2)本身带有类型信息;
(3)异常可以在任何地方抛出;
(4)异常只需要在上层捕获,要和方法调用分离。
2、java 的 Exception 包括两类:RuntimeException 和 IOException
3、java语言规定:
(1)必须捕获的异常有:Exception 及其子类,但不包括 RuntimeException 及其子类,称为 Checked Exception。
(2)不需要捕获的异常:Error 及其子类,RuntimeException 及其子类。
说明:
(1)Error 是发生了严重错误,程序对此一般无能为力:OutOfMemoryError、NoClassDefFoundError、StackOverflowError ...
(2)Exception 是发生类运行时逻辑错误,应该捕获异常并处理:
a. 捕获并处理错误:IOException、NumberFormatException
b. 修复程序(代码出错): NullPointerException、IndexOutOfBoundsException
(二) 捕获异常
1、java 中使用 try {...} catch() {...} 语句来捕获异常
讯享网
2、对可能抛出 Checked Exception 的方法调用:
(1)捕获 Exception 并处理
(2)不捕获但通过 throws 声明,将异常向上层抛出,进而在上层捕获。即通过 throws 声明的异常函数仍需要在上层捕获。
(3)main() 方法是 java 程序最后捕获异常 Exception 的机会,如果不捕获,程序会报错。
3、可以使用多个 catch 子句:
(1)每个 catch 捕获对应的 Exception 及其子类。
(2)从上到下匹配,匹配到某个 catch 后不再继续匹配。
(3)catch 中异常的顺序很重要,子类必须写在父类前,否则永远无法匹配到。
4、finally 语句块保证有无错误都会执行,但是 finally 不是必须的。
讯享网
5、如果某些异常的处理逻辑相同,但是异常之间不存在继承关系,需要写多条 catch 子句,则可以使用 “|” 表示多种 Exception。
(三) 抛出异常与异常转换
3、如果一个方法捕获了某个异常后,又在 catch 子句中抛出新的异常,就相当于把抛出的异常类型"转换"了:
4、特殊情况下 try{...}catch(){..}finally{..} 语句执行顺序:
以上如果在 finally 中也抛出了异常,则在原有的 catch 中的异常将不会再抛出,没有被抛出的异常称为 "被屏蔽" 的异常(Suppressed Exception):
5、通过 getSuppressed() 获取所有 Suppressed Exception:

(四) 自定义异常
1、JDK 定义的常用异常:
(1)RuntimeException:NullPointerException、IndexOutOfBoundsException、SecurityEception、IllegalArgumentException
(2)IOException:UnsupportedCharsetException、FileNotFoundException、SocketException...
(3)ParseException、GeneralSecurityException、SQLException、TimeoutException
3、自定义异常应该提供多个构造方法:
二、断言和日志
(一) 断言
1、断言(Assertion) 是一种程序调试方法,使用关键字 assert,断言条件预期为 true,如果断言失败,则2、抛出 AssertionError
2、断言的特点:
(1)断言失败时会抛出 AssertionError,导致程序结束退出
(2)不能用于可恢复的程序错误
(3)只应该用于开发和测试阶段
(4)断言很少被使用,更好的方法是编写单元测试
(二) 日志
(1)JDK Logging 定义了 7 个日志级别:
a. SEVERE
b. WARNING
c. INFO (默认级别)
d. CONFIG
e. FINE
f. FINER
g. FINEST
(2)JDK Logging 的局限:
a. JVM 启动时读取配置文件并完成初始化
b. JVM 启动后无法修改配置
c. 需要在 JVM 启动是传递参数:-Djava.util.logging.config.file=config-file-name
2、Commons Longging(是第三方jar包 推荐 常用)
Commons Logging 是 Apache 创建的日志模块
(1)Commons Logging 可以挂接不同的日志系统,即可以通过配置文件指定挂接的日志系统。
(2)Commons Logging 会首先自动搜索并使用 Log4j,如果 Log4j 不存在会自动使用 JDK Logging (JDK >= 1.4)
(3)Commons Logging 定义了 6个日志级别:
a. FATAL
b. ERROR
c. WARNING
d. INFO // 默认级别
e. DEBUG
f. TRACE
java学习基础篇4
(4)实际案例
3、Log4j 目前最流行的日志框架
(1)Log4j 有两个版本:1.x -- Log4j、2.x -- Log4j2。
(2)log4j 是一个组件化设计的日志系统,有几个主要的组建:Appender、Filter、Layout
a. 通过 Appender组件 把同一个log输出到不同的途径中(例如:Console、File、Socket);
b. 使用 Filter组件 来过滤哪些log需要被输出,哪些log不需要被输出;
c. 使用 Layout组件 来格式化要输出的 log 信息。如下图:
(3)在实际使用中不需要关心 Log4j 的内部 api,而是通过配置文件.xml 或者 .json 来配置它。
(4)Commons Logging 可以自动使用 Log4j:Commons Logging 如果在 classpath 中发现了 log4j,就会使用 log4j。
(5)实际业务中: 始终使用 Commons Logging 接口来写入日志,开发阶段无需引入 Log4j,使用 Log4j 只需要把正确的配置文件和相关 jar包 放入 classpath 下。且使用 .xml / .json 配置文件可以灵活修改日志,无需修改代码。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/9164.html