异常处理
Posted dedegui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常处理相关的知识,希望对你有一定的参考价值。
异常
异常是编写应用程序时,没有代码和语法错误会出现的意外情况,为了使程序出现异常还能按照预定的方式进行处理,必须进行捕获和处理。java提供了专门的异常处理机制。
常见的异常
如图所示,当除数为0时,出现算术错误
当遇到异常时,我们可以使用异常处理代码块。下列逐个介绍。
一、异常处理代码块try-catch-finally
1、带参数的try-catch
2、不同异常作不同处理的try-catch..catch
格式:
try{可能发生的异常代码}
catch(异常类1 参数1){异常处理代码1}
catch(异常类2 参数2){异常处理代码2}
。。。
catch(异常类n 参数n){异常处理代码n}
程序运行时只执行匹配到的第一个catch子块,不可能同时执行两个以上的子块
若没能捕获到异常只能有系统来处理,将出现未处理异常信息
子块顺序只能从小到大排序,最后一个总能捕获Excption。
3、不处理异常的try-finally
finally里的代码不管是否发生异常都是要执行
4、完整的异常处理块try-catch..catch-finally
二、throw语句和throws语句
throw语句语法形式如下
throw new 异常类构造方法名(参数列表);
throws语句用法
可选public或static等 返回类型 方法名(可选参数) throws 异常类名{
自动或主动引发异常的方法体
}
package Yichang; import java.util.Scanner; public class Ex1 { static double divide(double x,double y)throws Exception{ if(y!=0) {return x/y;} else { throw new Exception("除数为0无意义"); } } public static void main(String[] args) { try { double x,y,z; String str; Scanner input=new Scanner(System.in); while(true) { System.out.println("请输入被除数"); str =input.nextLine(); if(str.equals("")) {break;} x=Double.parseDouble(str); System.out.println("请输入除数"); str=input.nextLine(); y=Double.parseDouble(str); z=divide(x,y); System.out.printf("相除结果保留两位小数:%.2f ",z); } input.close(); }catch(Exception e) { System.out.println("异常"+e); } finally { System.out.println("程序结束"); } } }
显示异常:除数为0无意义——程序结束
三、自定义异常类
public MyException(){} //自定义异常类
throw new MyExceotion() //抛出自定义异常
四、异常处理代码块嵌套
在循环语句中嵌入try-catch代码块,可以使异常处理代码块发生异常时不终止程序运行
如在上述例子中内部的while循环中嵌入try-catch代码块
五、错误和断言
除异常外,程序不能运行还可能发生了错误(Error)。
断言(Assert)就是宣称条件必须成立。如断言“数必须大于等于零”(条件成立)才能计算平方根。如果false,则发生断言错误(AssertionError)。
assert 条件表达式;
assert 条件表达式:字符串型断言语句
默认情况下Java虚拟机会总是关闭断言。需要开启断言在运行命令中加入选项-ea
java —ea 主类名
六、总结
学习了异常及处理。异常时运行过程中出现了意外,无法常规运行下去,可以使用try-catch-finally捕捉并处理。需要到预先编写的代码中捕捉异常,否则程序就会意外终止。
捕捉异常代码块亦可以嵌套。
异常可以使用throw语句主动精准抛出,出现异常就要及时处理,否则影响程序的运行。也可以把异常转给调用它的方法来处理,这时在方法{}前加throws接受
以上是关于异常处理的主要内容,如果未能解决你的问题,请参考以下文章
java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段