Java异常详解 究竟什么是Java异常?
Java异常的分类和类结构图
1. Error —— 代表了JVM本身的错误,我们不作处理 2. Exception
- 编译时异常:必须处理,否则程序编译无法通过
- RuntimeException:即运行时异常,我们必须修正代码
- NullpointException(空指针异常), - ClassCastException (类型转 换异常), - IndexOutOfBoundsException(数组越界异常)
异常处理语句
1. try-catch
捕获单个异常
try{
}catch (ExceptionName e1){
}
多重捕获块
try{
}catch (异常类型1 异常的变量名1){
......
}catch (异常类型2 异常的变量名2){
......
}catch (异常类型3 异常的变量名3){
......
}
对于多个catch的情况,当try中程序发生异常,会按照从上往下 的顺序与catch进行匹配,一旦与其中一个匹配后就不会再与后面的catch进行匹配了,所以,在书写catch语句的时候,一定要把范围小的放在前面,范围大的放在后面 !
2. try-catch-finally
try{
......
}catch(异常类型1 异常的变量名1){
......
}catch(异常类型2 异常的变量名2){
......
}finally{
......
}
在catch中遇到return时,仍然会先执行finally语句,再回来执行对应catch语句中的return语句
3. throw/throws
throw和throws区别是什么? 将自己处理不了的,在方法或者语句上声明,告诉调用者,这里有问题
throws和throw的区别? 这完全就是两个不同的关键字。
if(s == null){
throw new NullPointerException();
}
"throw"用来抛出异常
public void f() throws NullPointerException {}
"throws"是函数进行异常说明时候的关键字。就是声明我这函数会出现这样这样的异常
public void f(String s) throws NullPointerException {
if(s == null){
throw new NullPointerException();
}else{
System.out.println(s);
}
}
自定义异常
Java内置的异常类,基本可以满足我们在编程中遇到的大部分异常情况,此外我们也可以自定义异常类,只需要继承Exception类即可
public class UserDefinedException extends Exception{
public UserDefinedException() {
}
public UserDefinedException(String message) {
super(message);
}
}
public class UserDefinedExceptionTest {
public static void main(String[] args) {
UserDefinedExceptionTest test = new UserDefinedExceptionTest();
try {
test.testMyException();
} catch (UserDefinedException e) {
e.printStackTrace();
}
}
public void testMyException() throws UserDefinedException {
if (3 > 2) {
throw new UserDefinedException("说明一下异常的具体问题");
}
}
}
|