标签:对象 mylog throws time sele java核心技术 重复 assert 帮助
第7章 异常、断言和日志
在Java中,所有异常对象都是派生于Throwable类的一个实例。
如果Java内置的异常类不能够满足需求,用户可以创建自己的异常类
Error类层次结构描述了Java运行时系统的内部错误和自愿耗尽错误,应用程序不应该抛出这种类型的对象。
Exception层次结构又分解为两个分支,一个分支派生于RuntimeException;另一个分支包含其他异常。
划分这两个分支的规则为:
由程序错误导致的异常属于RuntimeException;
程序本身没有问题,但由于像I/O错误这类问题导致的属于其它异常
一般来说,属于RuntimeException的有:
正所谓,“如果出现RuntimeException异常,那么就一定是你的问题。”
不属于RuntimeException的异常有:
Java将派生于Error类或RuntimeException类的所有异常称为非受查异常,所有其他的异常称为受查异常
而编译器将核查是否为所有的受查异常提供了异常处理器
一个方法不仅需要告诉编译器要返回什么值,还要告诉编译器有可能发生什么错误
一个方法必须声明所有可能抛出的受查异常,而非受查异常要么不可控制(Error),要么应该避免发生(RuntimeException)
如果方法没有声明所有可能发生的受查异常,编译器就会发出一个错误信息,使用throws关键字声明受查异常
使用throw关键字抛出异常。此时,只将异常作为对象抛出,不对其进行处理。
抛出一个已经存在的异常类非常容易,
若是遇到任何标准异常类都没有能够充分地描述清楚的问题,就需要创建自己的异常类,
即定义一个派生于Exception的类或者派生于Exception子类的类。
如果某个异常发生时没有在任何地方进行捕获,那程序就会终止执行,并在控制台上打印出异常信息。
要想捕获异常必须要设置try/catch语句块
在一个try语句块中可以捕获多个异常类型,每个异常类型使用一个单独的catch子句
而在catch子句中也可以再次抛出异常,这么做的目的是为了改变异常的类型
不管有无异常被捕获,finally子句的代码都会被执行
使用异常机制的技巧:
断言机制允许在测试期间想代码插入一些检查语句。当代码发布时,这些插入的测试语句将被自动地移走
Java引入了关键字assert,对应的有两种形式
assert 条件;
assert 条件:表达式;
这两种形式都会对条件进行检测,若结果为false,则抛出一个AssertError异常。
在第二种形式中,表达式将会被传入AssertError的构造器,并转换成一个消息字符串
在默认情况下,断言被禁用,需要开启。
什么时候使用断言呢?
每个Java程序员都很熟悉在有问题的代码中插入System.out.println方法调用来帮助观察程序运行的过程,
而一旦发现问题的根源,就要将这个打印语句删除。若其他地方还有问题,则需要重复这种写打印语句又删除的行为。
而记录日志则提供了一种更为科学的方法。
要生成简单的日志记录,可以使用全局日志记录器并调用其info方法:
Logger.getGlobal().info("File->Open menu item seleceted");
但是在适当的地方(如main开始)调用
Logger.getGlobal.setLevel(Level.OFF);
就会取消所有的日志。
在一个专业的应用程序中,不要将所有的日志都记录到一个全局日志记录器中,而是可以自定义日志记录器
可以调用getLogger方法来创建或者获取记录器
private static final Logger myLogger = Logger.getLogger("com.mycompany.myapp");
用一个静态变量存储日志记录器的引用
记录日志的常见用途是记录那些不可预料的异常
标签:对象 mylog throws time sele java核心技术 重复 assert 帮助
原文地址:https://www.cnblogs.com/ASE265/p/12240801.html