🍎个人主页:亮点的博客
🍊个人信条:理想如果不向现实做一点点屈服,那么理想也将归于尘土
🍑刷题专栏:【Java】牛客网刷题
🥭刷题网站:牛客网 学习的一种有效途径就是刷题,丰富的做题经验可以加深对知识点的理解,推荐一款刷题网站,赶快点击这里注册学习吧👉你的进阶之路!
一、要点
下面对异常的捕获及处理做一总结:
1、异常是导致程序中断运行的一种指令流,当异常发生时,如果没有进行良好的处理,则程序将会中断执行。
2、异常可以使用try•••catch进行处理,也可以使用try•••catch•••finally进行处理,在try语句中捕捉异常,然后在catch中处理异常,finally作为异常的统一出口,不管是否发生异常都要执行此段代码。
3、异常的最大父类是Throwable,其分为两个子类,分别为Exception、Erroro。Exception 表示程序处理的异常,而Error表示JVM错误,一般不由程序开发人员处理。
4、发生异常后,JVM会自动产生一个异常类的实例化对象,并匹配相应的catch语句中的异常类型,也可以利用对象的向上转型关系直接捕获Exception。
5、throws用在方法声明处,表示本方法不处理异常。
6、throw表示在方法中手工抛出一个异常。
7、自定义异常类时,只需要继承Exception类即可。
8、断言是JDK 1.4后提供的新功能,可以用来检测程序的执行结果,但开发中并不提倡使用断言进行检测。
9、最后
(1)通过继承java.lang.Exception类声明自己的异常类。
(2)在方法适当的位置生成自定义异常的实例,并用throw语句抛出。
(3)在方法的声明部分用throws语句声明该方法可能抛出的异常。
二、习题
题目:编写应用程序,从命令行输入两个小数参数,求它们的商。要求程序中捕获 NumberFormatException异常和ArithmeticException异常。
分析:ArithmeticException 算数异常:判断除数是否为0; NumberFormatException 数字格式异常:判读输入的数字是否是数字
代码如下:
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while(true){
try{
System.out.println("输入除数");
float f1 = Float.parseFloat(s.nextLine());
System.out.println("输入被除数");
float f2 = Float.parseFloat(s.nextLine());
if(f2==0){
throw new ArithmeticException("捕获到除0异常~~!!");//手动抛出除零异常
}
float result = f1/ f2;
System.out.println("计算结果:" + f1 + "/" + f2 + "=" + result);
break;//如果能正常运行到这里,说明前面的输入都是正确的,所以可以跳出循环了
}catch(NumberFormatException e1){//捕获数字格式异常
System.out.println("捕获到数字格式异常");
}catch (ArithmeticException e2) {//捕获到除零异常
System.out.println(e2.getMessage());
}
}
}
}
运行结果:
输入除数
4
输入被除数
0
捕获到除0异常~~!!
输入除数
2
输入被除数
a
捕获到数字格式异常
输入除数
6
输入被除数
9
计算结果:6.0/9.0=0.6666667
和我一起来刷题学习吧!传送门👉牛客网-求职|面试|学习