Java 异常

异常:

定义:程序执行中发生的不正常情况,如果出现异常,程序未处理,程序就会崩溃

java异常架构图

 

 

1. Throwable   Throwable是 Java 语言中所有错误或异常的超类。   Throwable包含两个子类: ErrorException。它们通常用于指示发生了异常情况。   Throwable包含了其线程创建时线程执行堆栈的快照,它提供了printStackTrace()等接口用于获取堆栈跟踪数据等信息。

1. 返回异常发生时的详细信息
public string getMessage();
2. 返回异常发生时的简要描述
public string toString();
3. 返回异常对象的本地化信息。使用Throwable的子类覆盖这个方法,可以声称本地化信息。如果子类没有覆盖该方法,则该方法返回的信息与getMessage()返回的结果相同
public string getLocalizedMessage();
4. 在控制台上打印Throwable对象封装的异常信息
public void printStackTrace();

2. Exception   Exception及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。

3. RuntimeException   RuntimeException是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。   编译器不会检查RuntimeException异常。例如,除数为零时,抛出ArithmeticException异常。RuntimeException是ArithmeticException的超类。当代码发生除数为零的情况时,倘若既"没有通过throws声明抛出ArithmeticException异常",也"没有通过try...catch...处理该异常",也能通过编译。这就是我们所说的"编译器不会检查RuntimeException异常"!   如果代码会产生RuntimeException异常,则需要通过修改代码进行避免。例如,若会发生除数为零的情况,则需要通过代码避免该情况的发生!

4. Error   和Exception一样,Error也是Throwable的子类。它用于指示合理的应用程序不应该试图捕获的严重问题,大多数这样的错误都是异常条件。   和RuntimeException一样,编译器也不会检查Error。

异常分类:

按严重程度:

error:java虚拟机无法解决的严重问题 例:JVM系统内部错误、资源耗尽等严重情况

Exception:编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进 行处理。 例:空指针访问

按照类型:

受检异常: 程序中必须接受检查和处理的异常,由Exception 类(RuntimeException类及子类除外)表示。 非受检异常: 程序中可以不接受检查和处理,或致命性错误异常,由RuntimeException类及子类和Error类及子类表示。

 

 

 

 

常见异常

1. RuntimeException子类:
序号异常名称异常描述
1 java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
2 java.lang.ArithmeticException 算术条件异常。譬如:整数除零等。
3 java.lang.SecurityException 安全性异常
4 java.lang.IllegalArgumentException 非法参数异常
5 java.lang.ArrayStoreException 数组中包含不兼容的值抛出的异常
6 java.lang.NegativeArraySizeException 数组长度为负异常
7 java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。
2.IOException
序号异常名称异常描述
1 IOException 操作输入流和输出流时可能出现的异常
2 EOFException 文件已结束异常
3 FileNotFoundException 文件未找到异常
3. 其他
序号异常名称异常描述
1 ClassCastException 类型转换异常类
2 ArrayStoreException 数组中包含不兼容的值抛出的异常
3 SQLException 操作数据库异常类
4 NoSuchFieldException 字段未找到异常
5 NoSuchMethodException 方法未找到抛出的异常
6 NumberFormatException 字符串转换为数字抛出的异常
7 StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常
8 IllegalAccessException 不允许访问某类异常
9 InstantiationException 当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常
10 java.lang.ClassNotFoundException 找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。

对于异常的处理三种方式:

1.捕获(使用try-catch-finally语句)
try{
   可能抛出异常的语句;
}catch((范围小)可能的异常类型1 引用){
   处理异常,引用.方法...
}catch((范围大)可能的异常类型2 引用){
   处理异常,引用.方法...
}finally{    
一定会执行的代码ps:即使提前return; finally依然执行
}
2.直接抛出(方法声明)在具体位置不处理
//throw 抛出异常时方法直接弹出栈,类似return
//throws 可能抛出的异常类型列表
//throws 用于警告此方法的调用者,可能会出现的风险
public class className{
 public void deposit(double amount) throws RemoteException{
  // Method implementation
  throw new RemoteException();
}
//Remainder of class definition
}
3.捕获再抛出 :统一处理异常

会先捕获异常,然后将该异常包装为自定义异常,再抛出给调用者。

try{
     result = x/y;
  } catch (ArithmeticException e) {
     throw new DividedByZeroException(e);
  }

 

自定义异常:

1.继承Exception

2.在子类中必须提供多个构造器

好处:1.对异常进行统一的处理

2.隐藏底层异常,项目更安全,异常信息更加直观

posted @ 2021-01-12 20:19  WZZR  阅读(45)  评论(0)    收藏  举报