异常处理机制
程序员文章站
2024-03-24 23:27:10
...
Exception
》什么是异常?
不正常就是异常
*常见的异常:java.util.InputMismatchException 输入类型不匹配异常 程序运行时报异常错误
1、jvm会处理程序中未处理的异常;
a:暂停程序
b:报错(异常内容【异常类型 原因描述】 出异常的代码行数)
2、不要让jvm去处理异常
》之前我们处理异常的方法:
通过大量的if判断来确保程序没有异常,但用户是万恶之源,程序员永远不知道用户会做什么所以编写的逻辑
判断不可能将所有的情况都囊括进去,程序在执行的过程中如果出现问题,出现异常此时没有异常处理机制,导致会
将异常交给jvm处理,而jvm处理的方式是 暂停程序报错——>不能忍受
并且通过if判定完成异常校验:代码臃肿,不利于阅读以及维护
*java提供了完整的异常处理方案,可以帮助我们在编写代码的过程中,处理程序中出现的异常
五个关键字:try catch finally throw throws
try-catch
》try-catch:
java中的异常机制
*语法结构:
try{
//可能出现的异常的代码块
}catch(声明异常){
//异常解决方法
}
*执行顺序:
1:执行try块中的内容
2:如果try块中的内容出现异常,执行catch块
3:匹配catch声明的异常,如果匹配上,则执行catch块中的异常解决方法
4:继续后续代码
5:如果不匹配catch声明的异常,那么此时将异常交给jvm处理——>程序停止,报错
*catch:
catch中的类型一定要注意,要能够捕获到try块中实际出现的异常,如忘记具体的异常名可以用Exception
去捕获异常信息
*tips:不要在catch块中做业务逻辑判断
public class Test01 {
public static void main(String[] args) {
try {
System.out.println(10/0);//new AirthmeticException(); 出异常AirthmeticException
}catch(Exception e) {//Exception e = new AirthmeticException();
System.out.println("输入数据有错。。。。");
}
System.out.println("后续代码。。。。");
}
}
try-catch-catch…
》try-catch-catch...:
*语法结构:
try{
//可能出现异常的代码
}catch(异常1){
//异常1解决方法
}catch(异常2){
//异常2的解决方法
}catch(异常3){
//异常3的解决方法
}......{
//异常n的解决方法
}
*try多层catch执行顺序:
1:执行try块,如果出现异常,new出当前异常
2:逐一匹配catch中的异常内容
3:如果匹配上,执行相应的catch中的代码,整个try-catch语句执行完毕
4:如果匹配不上,jvm解决当前异常信息
*注意事项:
1:在多重catch中一般情况下会在最后一个catch语句中编写Exception用来捕获可能出现的异常
2:不要再第一个catch中编写父类异常,不然会屏蔽所有子类异常
》异常对象的常见方法:
*toString():输出异常类型以及原因描述
*printStackTrace():打印堆栈信息、异常类型、原因描述以及异常位置
*getMessage:异常原因
public class Test02 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入被除数》》》》》");
try {
int num1 = input.nextInt();
System.out.println("请输入除数》》》》》");
int num2 = input.nextInt();
int result = num1/num2;
System.out.println("计算结果:num1"+num1+"/"+num2+"num2="+result);
}catch(InputMismatchException e) {
System.out.println("输入有误");
}catch(ArithmeticException e) {
System.out.println("除数不能为0");
}catch(Exception e) {
System.out.println("网络加载问题......");
}
input.close();
System.out.println("后续代码");
}
}
try-catch-finally
》try-catch-finally
*语法结构:
try{
//可能出现的代码
}catch(异常1){
//异常1处理办法
}......{
}catch(异常n){
//异常n处理办法
}finally{
//代码块(关闭资源的代码)
}
*测试如何让finally代码块不执行:
return语句不能让finally代码块不执行:finally代码块先于return语句执行
代码中存在System.exit()可以让finally代码块不执行,但一般不建议这样做
*执行顺序:
1:执行try块,如果出现异常,new出当前出现的异常
2:逐一匹配catch中的异常内容;
3:如果匹配上,则执行相应的catch块
4:如果匹配不上,则交给jvm去处理异常信息
5:不管匹配是否成功,都会执行finally代码块(finally中一般编写关闭资源操作的代码)
*扩展:jdk1.7之后对于try-catch-finally的改变:
可以通过对于流网络连接对象的创建声明在try后面的(),后续无需使用finally代码块显示的关闭资源操作
try(资源1;资源2;.....){
//可能出现异常的代码
}catch(异常1){
//异常1处理办法
}......{
//异常n处理办法
}
public class Test03 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入被除数》》》》》");
try {
int num1 = input.nextInt();
System.out.println("请输入除数》》》》》");
int num2 = input.nextInt();
int result = num1/num2;
System.out.println("运算结果:"+num1+"/"+num2+"="+result);
}catch(InputMismatchException e) {
System.out.println("输入有误");
}catch(ArithmeticException e) {
System.out.println("除数不能为0");
}catch(Exception e) {
System.out.println("网络加载问题");
}finally {
input.close();
System.out.println("Finally");
}
System.out.println("后续代码");
}
}
throw和throws
》异常机制:
throw throws
>throw:
1、throw声明当前代码块中可能存在的异常信息;
对于调用者而言有两种处理方案:
*通过try-catch捕获异常
*不管当前异常,交给jvm处理
2、throw会导致当前程序中断,后续代码不执行
>throws:
*throws在方法外对外抛出某个异常,调用者解决当前异常,main方法中对外抛出异常将交于jvm处理
*throws抛出异常,是异常解决的一种方法,定义在方法的外部,形式参数之后,可以抛出多个异常通过
“,” 分隔
*throw定义在方法内部,声明当前方法可能出现的异常信息,可以导致程序中断。
*一般会将throw和throws放在一起使用,throw声明的异常是检查时异常需要和throws一起使用
*但throws也可以单独使用
public class Test04 {
public static void main(String[] args) throws FileNotFoundException{
//创建student对象
Student stu = new Student();
stu.setName("万子");
System.out.println(stu);
info();
}
public static void info() throws FileNotFoundException,ArithmeticException{
new FileInputStream(new File(""));
}
}
class Student{
private String name;
private int age;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age)throws FileNotFoundException{
if(age<0||age>150) {
throw new FileNotFoundException();
}
this.age = age;
}
public String toString() {
return "Student[name="+name+",age="+age+"]";
}
}
上一篇: LSTM