十六 Java异常,try...catch...finally执行流程
来源:互联网 发布:windows 锁屏快捷键 编辑:程序博客网 时间:2024/06/05 06:02
Java异常分类
从大体上来看,分为俩部分:
error—错误
是指程序无法处理的错误,表示应用程序运行时出现的重大错误。例如jvm运行时出现的OutOfMemoryError以及Socket编程时出现的端口占用等程序无法处理的错误。
Exception — 异常
异常可分为运行时异常跟编译异常。
运行时异常:即RuntimeException及其之类的异常。这类异常在代码编写的时候不会被编译器所检测出来,是可以不需要被捕获,但是程序员也可以根据需要进行捕获抛出。常见的RUNtimeException有:NullpointException(空指针异常),ClassCastException(类型转换异常),IndexOutOfBoundsException(数组越界异常)等。
编译异常:RuntimeException以外的异常。这类异常在编译时编译器会提示需要捕获,如果不进行捕获则编译错误。常见编译异常有:IOException(流传输异常),SQLException(数据库操作异常)等。
难点
Java异常机制
抛出异常以及捕获异常 ,一个方法所能捕捉的异常,一定是Java代码在某处所抛出的异常。简单地说,异常总是先被抛出,后被捕捉的。
##throw跟throws的区别:
public void test thorws Exception(){ throw new Exception();}
从上面这一段代码可以明显的看出两者的区别。throws表示一个方法声明可能抛出一个异常,throw表示此处抛出一个已定义的异常。
try…catch…finally执行流程
正常来说,try会按循序执行的:当不存在异常时,try执行完后,在执行finally中的代码;当存在异常时,try执行到异常处,执行catch处代码块,最后执行finally。
然而,在实际中会遇到如下问题:
finally中不存在return
来看下面的代码:
package file;public class TryCatchDemo { public static int dd() { int x = 1; int y = 1; int z ; try { System.out.println("try"); z = x / y; return 1; }catch(Exception e) { System.out.println("catch"); return 2; }finally { System.out.println("finally"); } } public static void main(String[] args) { System.out.println(dd()); }}
不存在异常,结果为:
tryfinally1
同样是上面的代码,将 y = 1 ;修改为 y = 0 ;让方法抛出异常,执行代码的结果为:
trycatchfinally2
总结:不论是否存在异常,finally会在try…catch的return前执行。
finally中存在return
在上面的代码中,在finally中添加return。
然后先来看看没有异常时的输出。
public class TryCatchDemo { public static int dd() { int x = 1; int y = 1; int z ; try { System.out.println("try"); z = x / y; return 1; }catch(Exception e) { System.out.println("catch"); return 2; }finally { System.out.println("finally"); return 3; } } public static void main(String[] args) { System.out.println(dd()); }}
结果为:
tryfinally3
同上,将代码中的 y = 1;修改为 y = 0;时方法抛出异常,得到结果为:
trycatchfinally3
总结:不论是否存在异常,finally还是会在try…catch代码块的return前执行,返回自己代码块中的return
注意:当存在异常时,这里会输出try,是因为在try代码块中,输出语句在出现异常前,所以可以输出,反之不会输出,就跑异常了。
这个面试的时候经常考,要好好运行感受一下。
- 十六 Java异常,try...catch...finally执行流程
- 关于java 异常捕捉 ( try catch finally ) 执行流程
- try,catch,finally执行流程
- Java 异常: try...catch...finally
- Java try catch finally 虚拟机执行流程详解
- [java起步]异常(try,catch,finally)的执行过程
- Java异常机制--try catch finally 执行顺序详解
- Java异常处理try-catch-finally的执行过程
- java异常try catch finally中return具体执行顺序
- try-catch-finally块的执行流程
- try{} catch(){}finally{}执行
- java中的异常处理 try-catch 以及try-catch-finally
- 异常try-catch-finally
- java中的异常以及 try catch finally以及finally的执行顺序
- java中的异常以及 try catch finally以及finally的执行顺序
- Java try catch finally的执行顺序
- Java try catch finally的执行顺序
- Java try catch finally的执行顺序
- LeetCode 【Operating System】(二)
- 2017-10下旬与2017-11 项目中遇到的问题
- linux基础(十五)文件打包压缩、解压解档
- ubuntu 14.04设置了静态IP不能上网的解决方法
- 搭建开源工程,通过深度卷积网络,把移动设备上的照片提高到单反级别画质
- 十六 Java异常,try...catch...finally执行流程
- 156.PHP多进程
- acA4112-20uc
- 手机端页面布局之rem
- com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
- 自定义的servlet的 doGet,doPost是怎样被调用到的
- xml操作之根据2个不节点属性删除节点
- view处理事件
- Maximum Value Problem FZU 2037 找规律 递推