import java.util.List;
/*
异常的注意事项
运行时异常被抛出可以不处理,即不捕获也不声明抛出。
默认给虚拟机处理,终止程序,什么时候不抛出运行时异常了,再来继续执行程序
*/
public class Demo01Exception {
public static void main(String[] args) {
/*
多个异常使用捕获又该如何处理呢?
1.多个异常分别处理
2.多个一场一次捕获,多次处理
3.多个一场一次捕获一次处理
*/
//1.多个异常分别处理
// try {
// int[] arr = {1, 2, 3};
// System.out.println(arr[3]);//ArrayIndexOutOfBoundsException:3 索引越界异常
// } catch (ArrayIndexOutOfBoundsException e) {
// System.out.println(e);
// }
//
// try {
// List<Integer> list = List.of(1, 2, 3);
// System.out.println(list.get(3));//集合索引越界异常
// } catch (IndexOutOfBoundsException e) {
// System.out.println(e);
// }
///---------------------------------------------------------------------------
/*
一个try多个catch注意事项:
catch里边定义的异常变量,如果有子父类关系,那么子类的异常变量必须写在上边,否则就会报错
*/
//2.多个一场一次捕获,多次处理
// try {
// int[] arr = {1, 2, 3};
// System.out.println(arr[3]);//ArrayIndexOutOfBoundsException:3 索引越界异常
// List<Integer> list = List.of(1, 2, 3);
// System.out.println(list.get(3));//集合索引越界异常
//
// } catch (ArrayIndexOutOfBoundsException e) {
// System.out.println(e);
// } catch (IndexOutOfBoundsException e) {
// System.out.println(e);
// }
//----------------------------------------------------------
//3.多个异常一次捕获,一次处理
try {
int[] arr = {1, 2, 3};
System.out.println(arr[3]);//ArrayIndexOutOfBoundsException:3 索引越界异常
List<Integer> list = List.of(1, 2, 3);
System.out.println(list.get(3));//集合索引越界异常
} catch (Exception e) { //直接写祖父
System.out.println(e);
}
System.out.println("后续代码,可以执行");
}
}
避免在finally中出现return
/*
如果finally有return语句,永远返回finally中的结果,避免该情况
*/
public class Demo02Exception {
public static void main(String[] args) {
int a = getA();
System.out.println(a);
}
//定义一个方法,返回变量a的值
public static int getA() {
int a = 10;
try {
return a;
} catch (Exception e) {
System.out.println(e);
} finally {
//一定会执行的代码
a = 100;
return a;
}
}
}
子父类的异常
如果父类抛出了多个异常,子类重写父类方法时,抛出和父类相同的异常或者是父类异常额子类或者不抛出异常。
父类方法没有抛出异常,子类重写父类该方法时也不可以抛出异常,如果子类产生异常,只能捕获处理(try…catch),不能声明抛出(throw)
注意:
弗雷一场是什么样,子类异常就什么样