异常:
所谓异常是指程序在运行时出现错误时提示调用者的机制。
异常的种类有很多,不同种类的异常有不同的含义,也有不同的处理方式。
示例:
public class Demo1 {
public static void main(String[] args) {
int[] arr = {1,2,3};
System.out.println(arr[5]); //数组下标越界异常
}
}

异常的基本用法
捕捉异常基本语法:
try{
可能出现的异常;
} catch(异常类型 异常对象) {
} finally {
异常出口
}
try中存放可能出现异常的代码块;
catch中存放出现异常后的处理行为;
finally代码块中的代码用于处理善后工作,会在最后执行;
其中catch代码块和finally代码块可以根据具体情况可加可不加。
如果不处理异常,程序在遇到异常之后会终止运行。
public class Demo1 {
public static void main(String[] args) {
int[] arr = {1,2,3};
System.out.println("====1=====");
System.out.println(arr[5]);
System.out.println("====2=====");
}
}
输出结果:程序在运行到arr[5]时发生数组下标越界异常,程序终止。故只打印了有1 的输出语句,2没有正常输出。

2. 使用try处理异常之后
public class Demo1 {
public static void main(String[] args) {
int[] arr = {1,2,3};
try {
System.out.println("====1=====");
System.out.println(arr[5]);
System.out.println("====2=====");
} catch (ArrayIndexOutOfBoundsException e){
e.printStackTrace(); //打印出现异常的调用栈
}
System.out.println("调用try catch");
}
}
输出结果:

由输出结果可以看出try代码块中一旦遇到异常则不会继续执行,而是执行catch代码块中的代码,catch代码块执行完毕之后,继续向下执行。
一段代码也可能出现多个异常,不同的异常有不同的处理方法,因此可以搭配多个catch代码块。示例:
public class Demo1 {
public static void main(String[] args) {
int[] arr = {1,2,3};
try {
System.out.println("====1=====");
arr = null;
System.out.println(arr[5]);
System.out.println("====2=====");
} catch (ArrayIndexOutOfBoundsException e){
System.out.println("数组下标越界异常");
e.printStackTrace();
} catch (NullPointerException e){
System.out.println("空指针异常");
e.printStackTrace();
}
System.out.println("调用try catch");
}
}
输出结果:由于arr= null,故应捕获空指针异常
3. finally代码块表示进行最后的善后工作
无论代码是否存在异常,finally代码块中的代码最后一定会被执行
异常处理流程
程序先执行try代码块的代码;
如果try代码块出现异常,结束try代码块,查看catch代码块是否有匹配的异常类型;
若找到匹配的异常类型,执行catch代码块;
若没有找到匹配的异常类型,就会将异常向上传递到上层调用者;
无论是否找到匹配的异常类型,finally代码块都会在方法结束前执行;
如果上层调用者没有匹配的异常类型则会一直向上传递;
一直到main方法还是没有代码处理异常,则会将异常交给JVM处理,程序终止。
抛出异常
Java中除了一些内置类抛出异常之外,还可以手动抛出异常,使用throw关键字完成。
public class Demo1 {
public static void main(String[] args) {
int x = func(2,0);
System.out.println(x);
}
public static int func(int x,int y){
if (y == 0){
throw new ArithmeticException("抛出除数为0的异常");
}
return x/y;
}
}
输出结果:

最后
感谢你看到这里,看完有什么的不懂的可以在评论区问我,觉得文章对你有帮助的话记得给我点个赞,每天都会分享java相关技术文章或行业资讯,欢迎大家关注和转发文章!
网友评论