捕获与异常处理
1.1异常的概念是什么?
异常是用来封装错误信息的对象
组成结构:类型 提示 行号
1.2异常的继承结构是什么?
在程序当中,分为两种Error不是程序在运行过程中出现的问题。但是Exception是属于程序在运行过程中出现的异常。我们需要对这种Exception的异常进行处理。处理的方式有两种方法,一种是异常的地方进行捕获处理try…catch方法,另外一种是不在异常的地方自行处理,而是用throw的方式进行抛出。
2 异常处理之try…catch处理
2.1 try…catch的结构:try…catch当中是先把可能存在异常问题得到代码块放在try后面,然后把可能出现的异常放在catch后面的一个小括号里,并把解决方案放在catch后面的大括号里面.
try{
可能会出现异常的代码
} catch(异常的类型和异常的名字){
如果捕获到异常的解决方案
}
2.2 try…catch 还可以在后面接上多个catch,这种用法有点像if…else if 后面else if可以有多个一样的原理,如果需要捕获多个异常,就可以用多个catch来进行处理.
try{
可能会出现异常的代码
} catch(异常的类型1和异常的名字1){
如果捕获到异常的解决方案1
}
catch(异常的类型2和异常的名字2){
如果捕获到异常的解决方案2
}
catch(异常的类型3和异常的名字3){
如果捕获到异常的解决方案3
}
...
2.3 在try…catch的使用中常常遇到的如果是多种子类异常的情况,使用比较多的catch会造成代码块比较复杂,用异常的父类来直接接受这些异常,方便一次捕获多种可能性的异常,也不用把每个子类的异常都捕获一次.
try{
可能会出现异常的代码
}catch(Exception e){
如果捕获到异常统一的解决方案}
2.4 这样使用一个各类子类Exception的"爸爸"来统一给出一个异常出现后,解决问题的标准,方便一次性解决问题.
3.异常处理之Throws处理
3.1 在面对异常的时候,除了用try…catch方法来捕获异常,还可以用throws来抛出异常,就相当于,try…catch遇到问题后是自己解决了问题,但是throws是自己定位到问题后,自己没有解决问题,而是把问题抛给了自己的"领导",也就是把异常抛给了调用自己的方法.
3.2Throws处理的结构:
修饰符 返回值类型 方法名(参数列表)throws Exception {
方法体}
3.3抛出异常时候的注意事项
- 子类抛出异常后,在调用它的父类中也需要抛出异常,并且抛出的异常的类型要大于等于子类中异常的类型.
- 一般需要在main()方法之前捕获解决异常,而不是把问题抛出给main方法,因为抛给main方法就没有人解决了
- 所有异常抛出的顶级父类最大的类型是Exception而不是Throwable,因为Throwable是包含了一部分的Error的错误在里面的,这部分是不能被抛出的,因为这部分问题抛出后jvm并不能解决这类问题,所以只能抛出到Exception这一父类,在Exception这一父类里面的才是JVM有可能能解决的问题.
import java.util.Scanner;
public class Test1_ExceptionDemo {
public static void main(String[] args) throws Exception {
m1();//方法1用来测试暴露异常后用try...catch来进行处理
m2();//方法2用throws Exception来进行捕获处理
}
public static void m2() throws Exception{
System.out.println("请输入第一个要计算的数");
int a =new Scanner(System.in).nextInt();
System.out.println("请输入第二个要计算的数");
int b = new Scanner(System.in).nextInt();
System.out.println(a/b);
}
public static void m1() {
try {
System.out.println("请输入第一个要计算的数");
int a =new Scanner(System.in).nextInt();
System.out.println("请输入第二个要计算的数");
int b = new Scanner(System.in).nextInt();
System.out.println(a/b);
}catch(Exception e) {
System.out.println("请输入正确的数字");
}
}
}