Java -- 异常--以及处理
异常:
介绍:java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)
俩大类:
1. Error (错误):java虚拟机无法解决的严重问题。 如:JVM系统内部错误,资源耗尽等严重错误情况。
2. Exception: 其他因编译错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问,视图读取不存在的文件,分为 运行时异常【程序运行时,发生的异常】和 编译时异常【编程时,编译器检查出的异常】。
常见的运行时异常举例:
1. NullPointerException空指针异常 ,当异常程序试图在需要对象的地方使用null时,抛出该异常
2. ArrayIndexOutOfBoundsException ,数组下标越界异常,用非法索引访问数组时抛出的异常。
3. ClassCastException,试图将对象转换为不是实例的子类时,抛出该异常
4. NumberFormatException,数字格式不正确异常,字符串格式不能转换为适当格式时,抛出该异常
异常处理
介绍:就是当异常发生时,对异常处理的方式
1. try-catch-finally 程序员在代码中捕获发生的异常,自行处理
2. throws 将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM
try {
代码/可能有异常
} catch(Exception e ){
//1. 异常发生时
//2. 系统将异常封装成Excption 对象 e 传递给catch
//3. 得到异常处理对象后,程序员,自己处理
//4. 注意:如果没有发生异常catch代码块不执行
}
finally{
// 1.不管try代码块是否有异常发生,始终要执行finally
// 2.所以,通常将释放资源的代码,放在finally
}
1. try-catch
细节:
1. 如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块。
2. 如果异常没有发生,则顺序执行try的代码块,不会进入到catch
3. 如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源)
4. 可以有多个catch语句,捕获不同的异常,要求父类异常在后,子类异常在前,比如(Execption在后,NullPointerException在前),如果发生异常,只会匹配一个catch
5. 可以进行try-finally 配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉。
2. throws异常处理
介绍:如果一个方法可能生成某种异常,但是并不能确定如何处理这些异常,则此方法应显示声明抛出异常,表示该方法不将对这些异常进行处理,而由该方法的调用者负责处理
注意事项和细节:
1. 对于编译异常,程序中必须处理,比如 try-catch 或者 throws
2. 对于运行异常,程序中如果没有处理,默认就是throws的方式处理
3. 子类重写父类方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的一致,要么为父类抛出异常的类型的子类型
4. throws过程中,如果有方法 try-catch,相当于处理异常,就可以不必throws