Java随笔—异常断言日志

本文详细介绍了Java的异常分类,包括已检查异常和运行时异常,并讲解了如何声明、抛出和捕获异常。此外,还探讨了自定义异常类以及final子句的使用。接着,文章讨论了断言的启用与JUnit断言核心方法。最后,日志记录的重要性被提及,包括Java内置的日志API和常见的日志框架如log4j、slf4j等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.异常

1.1异常分类

Throwable异常分类
划分exception两个分支的规则是:

  • 由程序错误导致的异常属于RuntimeException;
  • 程序本身无问题,如IO错误这种问题导致的异常属于其他异常。

派生于runtimeException的异常包括:

  • 错误类型的转换;
  • 数组越界异常;
  • 访问空指针;

不是派生于runtimeException的异常包括:

  • 试图在文件尾部后面读取数据;
  • 试图打开一个不存在的文件;
  • 试图根据给定的字符串查找class对象,而这个字符串表示的类不存在;

Java中将error和runtimeException类的异常统称为未检查异常,其他异常称为已检查异常。

1.2声明已检查异常

不需要声明Java内部的异常,即从error层得到的错误;由于任何代码都有抛出异常的潜能,因此也不用声明从runtimeException继承的未检查异常;总之,在一个方法中,必须声明所有已检查异常;

1.3抛出异常

对于一个已经存在的异常类,抛出步骤:

  • 找到一个合适的异常类;
  • 创建一个这个类的对象;
  • 将对象抛出;
EOFException e=new EOFException();//创建EOFException异常类的对象,抛出异常
throw e;

1.4创建异常类

如果任何标准类都无法描述问题,可以自行创建异常类,定义一个派生于exception的类或者派生于它的子类的类,定义的类需要包含两个构造器,一个默认构造器,一个带有描述问题的构造器。

1.5捕获异常

通常,应该捕获那些知道如何处理的异常,对于那些不知道的应该继续传递,在方法首部添加throws抛出(不允许在子类的throws说明符中出现超过超类方法所列出的异常类范围)
捕获多个异常:可以为每个异常类型使用一个单独的try…catch;

try{...
}
catch(IOException e ){...
}
catch(FileNotFoundException e){...
}

同一个catch子句中可以捕获多个异常类型:

catch(FileFoundException | UnknowHostException){...}//注意捕获多个异常时,异常变量类型隐含为final

1.6final子句

不管是否有异常被捕获,final中的代码都会执行;final子句在关闭数据库的连接时经常使用;注意:当final含return语句时,假设利用return语句从try语句块中退出,在方法返回前final子句执行,假如final子句中也有一个return,这个返回值将覆盖之前原始的返回值(即try中的)

2.断言

2.1使用断言

是一种测试和调试阶段使用的战术性工具,断言机制允许在测试期间向代码中插入一些检查语句,当代码发布时,这些检查语句将自动移开。Java中断言引入关键字assert:

assert 条件;//检查结果为false就会抛出一个assertionError异常
assert 条件:表达式;//错误输出结果,表达式的目的是产生一个消息字符串,assertionError对象并不存储表达式的值

Java中默认没有开启assert的功能。点击IEAD上Run菜单,选择Edit Configuration,如图输入参数-ea开启断言(-da禁用)
Java开启断言

2.2Junit断言核心方法

在开发中,java语言的断言不推荐使用,可以使用junit断言、TestNG(Java的一个框架)中的Assert 和SoftAssert、TestNG中集成junit的相关断言等。如下为junit断言的核心方法:
junit断言方法

3.日志

3.1记录日志

一般在有问题的代码中加入System.out.println方法调用,但是需要多次反复加入,为解决这个问题设计了日志API
java.util.logging 是JDK的日志开发包,包括以下日志级别:
JDK日志等级
默认情况下,只记录前三个级别severe|warning|info 可以设置其他级别

logger.setLevel(Level.FINE);

如果想记录FINE级别的日志

Logger logger =Logger.getLogger("cn.cc.ccc");
logger.setLevel(Level.FINE);
logger.setUseParentHanndlers(false);
ConsoleHandler handler=new ConsoleHandler();
handler.setLevel(Level.FINE);
logger.addHandler(handler);

日志API的优点:

  • 可以很容易的取消全部日志记录,或者仅仅取消某个级别的日志,而且打开和关闭这个操作也很容易。
  • 可以很简单地禁止日志记录的输出,因此,将这些日志代码留在程序中所付出的代价很小。
  • 日志记录可以被定向到不同的处理器,用于在控制台中显示,用于存储在文件中。
  • 日志记录器和处理器都可以对记录进行过滤。过滤器可以根据过滤实现器制定的标准丢弃那些无用的记录项。
  • 日志记录可以采用不同的方式格式化。如:纯文本或者XML。
  • 应用程序可以使用多个日志记录器,他们使用类似包名的这种具有层次结构的名称,如:com.neu.app
  • 在默认情况下,日志系统的配置由配置文件控制,如果需要的话,应用程序可以替换这个配置。

3.2一些日志框架

常用的日志框架有:

  • sf4j
  • commons-logging
  • log4j
  • JDK自带logging
  • 其他日志框架

以上是对《Java核心卷Ⅰ》第十一章异常断言日志部分的初步学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wanglu的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值