Java开发--5--异常处理(上)

5.1 基础理论

1、要理解Java异常处理是如何工作的,需要掌握以下三种类型的异常

检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

2、名词解释

1、检查性异常:不处理编译不能通过。
2、非检查性异常:不处理编译可以通过,如果有抛出直接抛到控制台。
3、运行时异常:就是非检查性异常。
4、非运行时异常:就是检查性异常。

3、异常使用可遵循下面的原则

1、在当前方法被覆盖时,覆盖其它的方法必须抛出相同的异常或异常的子类。
2、在当前方法声明中使用try-catch语句捕获异常。
3、如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新异常。

4、异常对象结构

所有的异常对象是从Throwable 类派生而来的。Throwable 类有两个子类。一个是Exception 类,另一个是Error类。所有的异常都是Exception 类的子类。

Exception 类异常分为两块:

编译异常:这类异常在编译时编译器会提示需要捕获,如果不进行捕获则编译错误。常见编译异常有:IOException(流传输异常),SQLException(数据库操作异常)等。

运行时异常:在代码编写的时候不会被编译器所检测出来,可以不被捕获,也可以适时进行捕获抛出。常见的RuntimeException有:NullpointException(空指针异常),ClassCastException(类型转换异常),IndexOutOfBoundsException(数组越界异常)等。

5.2 异常类和异常方法

1、内置的异常类型

Java的异常类在java.lang 标准包中。其分为非检查性异常类和检查性异常类。

Java非检查性异常类

异常 描述
ArithmeticException 当出现异常的运算条件时,抛出此异常。例如:5/0
ArrayIndexOutOfBoundsException 用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引
ArrayStoreException 试图将错误类型的对象存储到一个对象数组时抛出的异常
ClassCastException 当试图将对象强制转换为不是实例的子类时,抛出该异常
IllegalArgumentException 抛出的异常表明向方法传递了一个不合法或不正确的参数
IllegalMonitorStateException 抛出的异常表明某一线程已经试图等待对象的监视器
IllegalStateException Java环境或Java应用程序不处于请求操作所要求的适当状态
IllegalThreadStateException 线程没有处于请求操作所要求的适当状态时抛出的异常
IndexOutOfBoundsException 指示某排序索引超出范围时抛出
NegativeArraySizeException 如果应用程序试图创建大小为负的数组,则抛出该异常
NullPointerException 当应用程序试图在需要对象的地方使用 null 时,抛出该异常
NumberFormatException 当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常
SecurityException 由安全管理器抛出的异常,指示存在安全侵犯
StringIndexOutOfBoundsException 此异常由 String 方法抛出,指示索引或者为负,或者超出字符串的大小
UnsupportedOperationException 当不支持请求的操作时,抛出该异常

Java检查性异常类

异常 描述
ClassNotFoundException 应用程序试图加载类时,找不到相应的类,抛出该异常
CloneNotSupportedException 当调用Object类中的clone方法克隆对象,但该对象的类无法实现 Cloneable 接口时,抛出该异常
IllegalAccessException 拒绝访问一个类的时候,抛出该异常
InstantiationException 当试图使用Class类中 newInstance方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常
InterruptedException 一个线程被另一个线程中断,抛出该异常
NoSuchFieldException 请求的变量不存在
NoSuchMethodException 请求的方法不存在

2、异常方法

Throwable 类的主要方法

方法 说明
public String getMessage() 返回关于发生的异常的详细信息。这个消息在Throwable类的构造函数中初始化了
public Throwable getCause() 返回一个Throwable对象代表异常原因
public String toString() 使用getMessage()的结果返回类的串级名字
public void printStackTrace() 打印toString()结果和栈层次到System.err,即错误输出流
public StackTraceElement [] getStackTrace() 返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底
public Throwable fillInStackTrace() 用当前的调用栈层次填充Throwable对象栈层次

你可能感兴趣的:(Java开发)