java关于异常处理只使用try-finally而不使用catch
来源:互联网 发布:西班牙无敌舰队知乎 编辑:程序博客网 时间:2024/06/05 09:03
1. 前言:
通常我们在异常处理的时候一般就使用try-catch,
try { // 需要处理的代码段} catch(Exception e) { // 异常处理方法}
更加好一些的处理方式为try-catch-finally,
try { // 需要处理的代码段} catch(Exception e) { // 异常处理方法} finally { // 无论有无异常最后都要执行的代码段}
2.1 问题1:
2.1.1 如下代码可否执行?
public class Test { public static void main(String[] args) { System.out.println("return value of getValue():" +getValue()); } public static int getValue() { int i = 1; try { i = 4; } finally { i++; return i; } }}
2.1.2 解析
以上代码主要问题在于没有使用catch,而直接使用的try-finally,那么到底可行不可行呢?答案是可以,以上代码运行出来的结果为:return value of getValue():5
2.1.3 疑惑
自然我们想想也能想通,这里没有异常出现,那么没有catch也不影响,那么问题来了…
2.2 问题2
如果在try代码块中抛出异常了呢?我们这里只用了try-finally,还是没有用到catch,那么还会有结果吗?
2.2.1 如下代码可否执行?
public class Test { public static void main(String[] args) { System.out.println("return value of getValue():" +getValue()); } public static int getValue() { int [] a = new int[1]; int i = 1; try { a[10] = 90; i = 4/0; } finally { i++; return i; } }}
2.2.2 解析
以上代码在try中出现了异常,按照常理会进入catch中获取异常,那么程序还会正常执行吗?会的,执行结果为return value of getValue():2
,这里没有catch,那么没有就不执行catch,直接进入finally代码块中执行,程序正常执行。
3. 分析
严格的说法其实是:try只适合处理运行时异常,try-catch适合处理运行时异常+普通异常。也就是说,如果你只用try去处理普通异常却不加以catch处理,编译是通不过的,因为编译器硬性规定,普通异常如果选择捕获,则必须用catch显示声明以便进一步处理。而运行时异常在编译时没有如此规定,所以catch可以省略,你加上catch编译器也觉得无可厚非。
阅读全文
1 0
- java关于异常处理只使用try-finally而不使用catch
- Java异常处理(try、catch、finally使用)
- Java 中使用 try-catch-finally处理异常
- 异常处理----使用 try…catch…finally 处理异常
- java只使用try和finally不使用catch的原因和场景
- java只使用try和finally不使用catch的原因和场景
- java只使用try和finally不使用catch的原因和场景
- java只使用try和finally不使用catch的原因和场景
- java只使用try和finally不使用catch的原因和场景
- java异常处理(Try Catch Finally)
- Java异常处理机制 try-catch-finally
- java异常处理 try catch finally
- 【Java基础】[异常处理]try,catch,finally
- JAVA异常处理方式 try-catch-finally
- java中的异常处理 try-catch 以及try-catch-finally
- java中异常的使用try{}catch(){}finally{} ;throw。
- Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别如何使用?
- Java 异常处理 try catch finally throws throw 的使用和解读(一)
- ZooKeeper 学习 (五) 开源ZkClient操作ZooKeeper
- Android学习笔记(一)
- Android源码学习——linker(2)
- dedecms中无法直接在arctype数据表中直接调取栏目链接
- PAT --- 1002. 写出这个数 (20)
- java关于异常处理只使用try-finally而不使用catch
- Local variables and pointer
- atitit 碎片化学习.docx attilax 总结
- JavaScript的eval用法
- 关于MFC List Control 中删除 选中的n行 和 单行问题
- atom设置国内镜像
- 最高台
- 人生的意义--- 甜甜圈
- dedecms添加搜索功能: