java学习基础篇4

java学习基础篇4一 错误处理 一 java 的异常 1 Java 使用异常来表示错误 1 异常是一种类 class 2 本身带有类型信息 3 异常可以在任何地方抛出 4 异常只需要在上层捕获 要和方法调用分离 2 java 的 Exception 包括两类 RuntimeExcep 和 IOException java 异常类继承关系图 png 3 java 语言规定

大家好,我是讯享网,很高兴认识大家。



一、错误处理

(一) java的异常

1、Java 使用异常来表示错误:
(1)异常是一种类 class;
(2)本身带有类型信息;
(3)异常可以在任何地方抛出;
(4)异常只需要在上层捕获,要和方法调用分离。

 
讯享网 

2、java 的 Exception 包括两类:RuntimeException 和 IOException


java异常类继承关系图.png

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 信息。如下图:


Log4j.png

(3)在实际使用中不需要关心 Log4j 的内部 api,而是通过配置文件.xml 或者 .json 来配置它。
(4)Commons Logging 可以自动使用 Log4j:Commons Logging 如果在 classpath 中发现了 log4j,就会使用 log4j。
(5)实际业务中: 始终使用 Commons Logging 接口来写入日志,开发阶段无需引入 Log4j,使用 Log4j 只需要把正确的配置文件和相关 jar包 放入 classpath 下。且使用 .xml / .json 配置文件可以灵活修改日志,无需修改代码。

小讯
上一篇 2024-12-27 16:59
下一篇 2024-12-31 21:56

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/9164.html