try..catch..finally

try语句指定一段代码,该段代码就是一次捕获并处理异常的范围
在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做
响应的处理
如果没有异常产生,所有的catch代码段都能略过不执行

Integer kk=null;
try{
String str="123.456";
//由于str参数数据不合法,不是整数,所以这里异常NumberFormatException
kk=Integer.parseInt(str);
System.out.println("数据转换结果");//如果上句出现异常,则立即会中断代码执行,这里不会有执行
机会
} catch(NumberFormatException e){
//异常处理中catch只匹配一次,匹配之后的后续catch会被忽略。注意这里不是最佳匹配
System.out.println("数据格式错误!");
} catch(Exception e){
System.out.println("出现了错误:"+e.getMessage());
}
System.out.println("准换结果为:"+kk);

在catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不
同类型的异常对象,同时允许异常的继续抛出
catch只匹配成功一次即可,注意不是最佳匹配,例如交换Exception和NumberFormatException的位置,这里就
会语法报错,报错的提示信息为Unreachable catch block for NumberFormatException. It is already handled
by the catch block for Exception,含义是catch(NumberFormatException e)是不可达语句,
NumberFormatException是Exception的子类。

Integer kk=null;
try{
String str="123.456";
kk=Integer.parseInt(str);
System.out.println("数据转换结束");
} catch(NumberFormatException e){
System.out.println("数据格式错误!");
//继续抛出异常,不再是直接消费处理掉了,导致的结果是try之后的代码并没有得到执行
throw new Exception(e.getMessage());
//throw e;在用在方法上throws声明抛出,因为NumberFormatException是运行时异常
//throw new Exception(""); 需要在方法上声明抛出,因为Exception是受检型异常
} catch(Exception e){
System.out.println("出现了错误:"+e.getMessage());
}
System.out.println("转换结果为"+kk);

nally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态作统一
的管理
无论try所指定的程序块是否抛出异常,nally所指定的代码都要执行。
try可以没有catch而直接使用nally,当然在方法上声明抛出

Scanner sc=new Scanner(System.in);
System.out.println("请输入一个整数");
String ss=sc.nextLine();
try {
int kk=Integer.parseInt(ss.trim());
System.out.println("输入数据正确,具体值为:"+kk);
} catch(NumberFormatException e){
System.out.println("输入的数据格式错误!");
} catch (Exception e) {
System.out.println("其它错误:"+e.getMessage());
} finally{ //不管陷阱代码中是否出现异常,是否执行了catch语句,finally语句块一定要执行
System.out.println("finally....");
}
System.out.println("end pp....");//这个语句有可能不执行,但是finally是无论如何都会被执行。典型
案例去掉所有的catch语句,当出现异常时finally还是执行了的,但是这个语句没有执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值