异常:可与常态不同,与正常形态不同,有错误。 阻止当前方法和作用域。
Exception是所谓的异常。 这是因为在编码、环境和用户操作输入方面存在问题
try……catch捕获异常并进行处理
抛出异常的代码将终止执行,程序的控制权将传递给catcha块中的异常处理代码
例如:
如果输入的类型不是整数,则会发生输入类型不匹配异常,执行catch代码块,显示“应该输入整数!然后继续执行以下代码
如果try抛出多种类型的异常?
注意: catch按从子类到父类的顺序捕获小异常,然后捕获大异常。 否则,将发生错误,如下图所示
在以下情况下顺序是错误的:
try…catch…finally
finally可实现连接和磁盘文件关闭等资源回收
注:在finally块中使用return或throw语句会导致try块catch块中的return、throw语句无效
一般例外类型
IndexOutofBoundsException:序列越界异常
NumberFormatException:数字格式异常
ArithException:算术异常,例如除数为0
访问异常信息
getmessage(: )返回此异常的详细说明字符串
打印堆栈跟踪() :将此异常的跟踪堆栈信息输出到标准错误输出
打印堆栈跟踪(打印流) :将该异常的跟踪堆栈信息输出到指定的输出流中
getStackTrace () :返回此异常的跟踪堆栈信息
抛出异常
使用throws语句声明异常后,程序就不必使用try.catch捕获异常
自定义异常
如果定制runtime异常,则必须继承RuntimeException基类并提供两个构造函数来定义异常。 一个是无参数的构造函数。 一个是具有字符串参数的构造函数,字符串参数是异常对象的描述信息。 这也是异常对象的getMessage ()方法的返回值
例如:
publicclassauctionexceptionextendsexception {
//没有参数的构造函数
公共自动执行() {}//1
//具有一个字符串参数的构造函数
publicauctionexception (string msg )//2
super(msg; 从super调用父类构造函数,并将此字符串参数传递给异常对象的消息属性。 此消息属性是该异常对象的详细描述信息。
}
}
异常链
异常连锁:将捕获的异常包装成一个新的异常,然后在新的异常中增加对原异常的引用,抛出该新异常,如同连锁反应,一个引起另一个
范例
从JDK 1.4开始,所有Throwable子类都可以在构造函数中将cause对象作为参数接收。 此cause用于表示原始异常。 这样,可以将原始异常传递给新异常,即使在当前位置创建并抛出新异常,也可以使用此异常链跟踪第一次出现异常的位置。