✨hello,进来的小伙伴们,大家好呐!✨
🎁🎁系列专栏:【JavaSE】
🍱🍱本篇内容:异常的认识,异常分为几类,如何处理异常等等。
🍮🍮作者简介:一名大二即将升大三的科班编程小白,我很平凡,学会努力!
一、定义
在Java中,将程序执行过程中发生的不正常行为称为异常。
实例:1算术异常
public class TestDemoX {
public static void main(String[] args) {
int a = 10;
System.out.println(a/0);
}
}
实例2:数组越界异常
public class TestDemoX {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
System.out.println(arr[20]);
}
}
实例3:空指针异常
public class TestDemoX {
public static void main(String[] args) {
int[] arr1 =null;
System.out.println(arr1.length);
}
}
注意这些异常都继承于Exception。
二、 异常的分类
1、编译时异常
public class Person {
private String name;
private String gender;
int age;
// 想要让该类支持深拷贝,覆写Object类的clone方法即可
@Override
public Person clone() {
return (Person)super.clone();
}
}
2、运行时异常
在程序执行期间发生的异常,称为运行时异常,也称为非受检查异常。
这里我们借助JavaAPI,可以知道RunTimeException以及其子类对应的异常,都称为运行时异常。
注意:编译时出现的语法性错误,不能称之为异常!
比如我们这里把println写成了prinln 这就称为语法错误,而不是异常了!
System.out.prinln();
三、异常的处理
1.了解异常
我们刚才提到,当程序出现异常的时候,我们没去处理,那么这个时候程序就终止了,不会再继续下去!
public class TestDemoX {
public static void main(String[] args) {
int a = 10;
System.out.println(a/0);
System.out.println("执行后续代码!");
}
}
可以发现,后续代码没有被执行! 这个时候异常会交给jvm来处理,程序会立即终止!
2、异常处理
这里我们以一个游戏登录来描述:
try里面存放可能出现异常的代码;
catch里面捕获可能出现的异常;
注意:一个try可以对应多个catch。
try {
登陆游戏();
开始匹配();
游戏确认();
选择英雄();
载入游戏画面();
...
} catch (登陆游戏异常) {
处理登陆游戏异常;
} catch (开始匹配异常) {
处理开始匹配异常;
} catch (游戏确认异常) {
处理游戏确认异常;
} catch (选择英雄异常) {
处理选择英雄异常;
} catch (载入游戏画面异常) {
处理载入游戏画面异常;
}
我们还是以刚才的算术异常来举例:
public class TestDemoX {
public static void main(String[] args) {
int a = 10;
try{
System.out.println(a/0);
}
catch (ArithmeticException e){
System.out.println("出现了算术异常!");
}
System.out.println("执行后续代码!");
}
}
运行结果:我们发现catch捕获异常之后,后续代码照样执行。
那么我们如何得知出现了何种异常呢?很简单,我们只需要通过(参数)e.printStackTrace();便可以快速的定位异常的位置。
注意,这里没有同时抛出两个以上的异常的说法,就是catch捕获到异常以后,会执行catch{}里面的内容,写个例子给大家看一下:
public class TestDemoX {
public static void main(String[] args) {
int a = 10;
try{
System.out.println(a/0);
int[] arr = {1,2,3,4};
arr = null;
System.out.println(arr[100]);
}
catch (ArithmeticException e){
e.printStackTrace();
System.out.println("出现了算术异常!");
}
catch(ArrayIndexOutOfBoundsException e){
e.printStackTrace();
System.out.println("数组越界异常!");
}
catch (NullPointerException e){
e.printStackTrace();
System.out.println("空指针异常!");
}
System.out.println("执行后续代码!");
}
}
运行结果:我们发现,捕获到算术异常以后,剩下的代码并没有被执行,这正好验证了没有同时抛出多个异常的说法!