“核心技术:异常、断言和日志”的版本间差异
跳到导航
跳到搜索
(→如何抛出异常) |
(→创建异常类) |
||
第64行: | 第64行: | ||
=== 创建异常类 === | === 创建异常类 === | ||
定义一个派生于 Exception 的类, 或者派生于 Exception 子类的类: | |||
* 习惯上,定义的类应该包含两个构造器, 一个是默认的构造器;另一个是带有详细描述信息的构造器 | |||
<syntaxhighlight lang="java"> | |||
class FileFormatException extends IOException | |||
{ | |||
public FileFormatExceptionO {} | |||
public FileFormatException(String gripe) | |||
{ | |||
super(gripe); | |||
} | |||
} | |||
</syntaxhighlight> | |||
==== 相关方法 ==== | |||
===== javaJang.Throwabie ===== | |||
* Throwable( ) | |||
构造一个新的Throwabie 对象, 这个对象没有详细的描述信息。 | |||
* Throwable(String message ) | |||
构造一个新的throwabie 对象, 这个对象带有特定的详细描述信息。习惯上, 所有派生的异常类都支持一个默认的构造器和一个带有详细描述信息的构造器。 | |||
* String getMessage( ) | |||
获得Throwabie 对象的详细描述信息。 | |||
== 捕获异常 == | == 捕获异常 == |
2020年10月20日 (二) 02:28的版本
错误处理
异常分类
异常对象都是派生于Throwable 类的一个实例:
- Error:类层次结构描述了Java 运行时系统的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的对象。
- Exception:
- RuntimeException:由程序错误导致的异常属于RuntimeException;
- 其他异常:由于像I/O 错误这类问题导致的异常;
派生于RuntimeException 的异常包含下面几种情况:
- 错误的类型转换。
- 数组访问越界i
- 访问null 指针
不是派生于RuntimeException 的异常包括:
- 试图在文件尾部后面读取数据。
- 试图打开一个不存在的文件。
- 试图根据给定的字符串查找Class 对象, 而这个字符串表示的类并不存在。
非受查异常 与 受查异常:
- 非受查(unchecked) :异常派生于Error 类或RuntimeException 类的所有异常称为;
- 受查(checked) :所有其他的异常称为。
声明受査异常
使用throws子句声明异常:
- 调用一个抛出受査异常的方法, 例如, FilelnputStream 构造器。
- 程序运行过程中发现错误, 并且利用throw 语句抛出一个受查异常(下一节将详细地介绍throw 语句)。
- 程序出现错误, 例如,a[-l]=0 会抛出一个ArraylndexOutOffloundsException 这样的非受查异常。
- Java 虚拟机和运行时库出现的内部错误。
- 如果一个方法有可能抛出多个受查异常类型, 那么就必须在方法的首部列出所有的异常类。
class MyAnimation
{
public Image loadlmage(String s) throws FileNotFoundException, EOFException
}
- 如果在子类中覆盖了超类的一个方法, 子类方法中声明的受查异常不能比超类方法中声明的异常更通用。
如何抛出异常
对于一个已经存在的异常类, 将其抛出非常容易:
- 找到一个合适的异常类。
- 创建这个类的一个对象。
- 将对象抛出。
- 抛出的时异常类对象;
throw new EOFExceptionQ ;
- 一旦方法抛出了异常, 这个方法就不可能返回到调用者。
创建异常类
定义一个派生于 Exception 的类, 或者派生于 Exception 子类的类:
- 习惯上,定义的类应该包含两个构造器, 一个是默认的构造器;另一个是带有详细描述信息的构造器
class FileFormatException extends IOException
{
public FileFormatExceptionO {}
public FileFormatException(String gripe)
{
super(gripe);
}
}
相关方法
javaJang.Throwabie
- Throwable( )
构造一个新的Throwabie 对象, 这个对象没有详细的描述信息。
- Throwable(String message )
构造一个新的throwabie 对象, 这个对象带有特定的详细描述信息。习惯上, 所有派生的异常类都支持一个默认的构造器和一个带有详细描述信息的构造器。
- String getMessage( )
获得Throwabie 对象的详细描述信息。