目录
Java 异常概念
Java程序在执行过程中所发生的异常(运行时一切不正常情况)事件可分 为两类:
异常体系
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e4465c3adce4f64beda719d1aaec60bc.png)
常见的异常
编译时期异常:(受查异常)在编译时期,就会检查,如果没有处理异常,则编译失败。(如输入输出、类型转换异常)
常见的编译时异常
1.FileNotFoundException
当试图打开指定路径名表示的文件失败时,抛出此异常。
2.ClassNotFoundException
找不到具有指定名称的类的定义。
3.SQLException
提供有关数据库访问错误或其他错误的信息的异常。
4.NoSuchFieldException
有时候使用反射进行Field相关操作的时候会出现这样异常
5.NoSuchMethodException
找不到具体的方法
6.ParseException
运行时异常
在编译时期,不会报错,在运行时期会报错.。(如数学异常)
常见的运行时异常
1.NullPointerException
当应用程序试图在需要对象的地方使用 null 时,抛出该异常(空指针)
2.ArithmeticException
当出现异常的运算条件时,抛出此异常。
3.ClassCastException
是类型转换错误,通常是进行强制类型转换时候出的错误。
4.ArrayIndexOutOfBoundsException
用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引(就是数组越界)
5.StringIndexOutOfBoundsException
指示某排序索引(例如数组、字符串或者向量的排序)超出范围是抛出。
异常处理
java异常处理的方式:
try:
捕获异常的第一步是用try{…}语句块选定捕获异常的范围, 将可能出现异常的代码放在try语句块中。在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配。 一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常处理,一旦处理完成就跳出当前的try-catch结构(在没有写finally的情况下)。继续执行其后的代码。在try结构中声明的变量,出了try结构之后,就不能被调用。
catch (Exceptiontype e):
在catch语句块中是对异常对象进行处理的代码。 每个try语句块可以伴随一个或多个catch语句, 用于处理可能产生的不同类型的异常对象。catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓,如果异常类型满足子父类的关系,则要求子类一定要声明在父类的上面,否则报错。
finally:
捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。
不论在try代码块中是否发生了异常事件, catch语句是否执行, catch语句是否有异常, catch语句中是否有return,finally块中的语句都会被执行。
finaly中声明的是一定会被执行的代码,即使catch中出现了异常,try中有return语句,catch中有return语句等情况。
finally语句和catch语句是任选的。
像数据库连接,输入输出流,网络编程socket等资源,JVM是不能自动回收的,我们需要手动的进行资源的释放。此时的资源的释放,就需要声明在finally中。
finally 执行的时机是在方法返回之前(try 或者 catch 中如果有 return 会在这个 return 之前执行 finally). 但是如果finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return.
public class Demo{
public static void main(String[] args) {
System.out.println(func());
}
public static String func() {
try {
return "try" ;
} finally {
return "finally";
}
}
}
结果
throws 和 throw
throws:定义一个方法的时候可以使用throws关键字声明,表示此方法不处理异常,而交给方法调用进行处理.
throws在方法参数列表后声明此方法可能会出现异常.
Exception体系向下又分为:编译器异常(检查异常):没有继承RuntimeException.
throw用于方法体中,用来抛出一个实际的异常对象,使用throw后,要么使用try catch捕获异常,要么使用throws声明异常
throws用于方法声明处,用来声明该方法可能发生的异常类型,可以是多个异常类型,用来强制调用该方法时处理这些异常抽象方法也可以使用throws