java基础(四)之java浅析异常处理机制
2017-03-24 11:34
197 查看
引言:
异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。我们在处理文件时,需要考虑文件不存在等各种极端异常情况,这样才能更好的保证程序的健壮性。
一.异常的基本概念与分类
1.基本概念
Throwable: 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。有两个重要的子类:Exception(异常)和Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。
1) Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。
2) Exception(异常):是程序本身可以处理的异常。
注意:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。具体概念等信息,可以看这篇文章异常处理机制
2.分类
![](https://img-blog.csdn.net/20170324105603981?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHFoYWRvb3A=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
二.异常的用法及若干注意事项
1.try catch finally 用法
2)当程序执行出现异常的时候,系统会抛出一个异常,然后由try{}语句中中出现异常的地方转到catch{}语句中。不过不管有没有异常产生,finally{}中的语句都将执行。
3)如果系统出现系统错误或者运行Runtime异常,jvm会结束程序运行,不一定会执行finally{}中的语句。
4)如果try{}中产生的异常在catch中没有处理,系统将停止程序,也不会执行finally中的语句。
5)如果存在多个异常,则安排顺序逐个匹配,匹配到则进行该异常代码处理,其他异常则不执行,相当于选择最近最合适的异常处理。所以越顶层的异常需要放在越后面。
2.若干注意事项
1)不要在finally块中使用renturn或throw等导致方法终止的语句,因为一旦使用,将会导致try块、catch块中的return、throw语句失效。
这里其实很好理解,在异常处理结束(return,throw等语句)之前进行finaly块处理。如果finally块中存在相应的结束语句(return,throw),则会先执行完成,导致catch块中相应结束语句失效。
三.如何自定义异常及处理原则
1.自定义异常
对应上面的异常分类, 选择你
b1cc
要自定义的异常父类,我这里以RuntimeException
使用throw关键字抛出异常,如 throw new Exception("my exception.....")
3.处理原则
知道如何处理该异常则在本层进行异常处理,不知道如何处理则抛出异常交给上一层调用者进行处理.
四.异常的其他应用场合
在java中break语句只能退出当前循环,然后对于多层循环无法退出,这时可以巧妙的利用异常进行多层循环退出
异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。我们在处理文件时,需要考虑文件不存在等各种极端异常情况,这样才能更好的保证程序的健壮性。
一.异常的基本概念与分类
1.基本概念
Throwable: 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。有两个重要的子类:Exception(异常)和Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。
1) Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。
2) Exception(异常):是程序本身可以处理的异常。
注意:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。具体概念等信息,可以看这篇文章异常处理机制
2.分类
二.异常的用法及若干注意事项
1.try catch finally 用法
try { //业务实现逻辑 ... } catch(SubException e) { //异常处理块1 ... } catch(SubException2 e) { //异常处理块2 ... } ... finally { //资源回收块 ... }1)在java语言中,通常将可能出现异常的语句放入try{}语句中,将出现错误后需要执行的语句放入到catch{}语句中,将无论是否发生异常都要执行的语句放在finally{}语句中。
2)当程序执行出现异常的时候,系统会抛出一个异常,然后由try{}语句中中出现异常的地方转到catch{}语句中。不过不管有没有异常产生,finally{}中的语句都将执行。
3)如果系统出现系统错误或者运行Runtime异常,jvm会结束程序运行,不一定会执行finally{}中的语句。
4)如果try{}中产生的异常在catch中没有处理,系统将停止程序,也不会执行finally中的语句。
5)如果存在多个异常,则安排顺序逐个匹配,匹配到则进行该异常代码处理,其他异常则不执行,相当于选择最近最合适的异常处理。所以越顶层的异常需要放在越后面。
2.若干注意事项
1)不要在finally块中使用renturn或throw等导致方法终止的语句,因为一旦使用,将会导致try块、catch块中的return、throw语句失效。
这里其实很好理解,在异常处理结束(return,throw等语句)之前进行finaly块处理。如果finally块中存在相应的结束语句(return,throw),则会先执行完成,导致catch块中相应结束语句失效。
public class testException { public static void main(String[]args){ test(); } public static void test(){ int a=3; try{ int s=a/0; System.out.println(s);} catch(Exception e){ System.out.println("执行catch"); throw new RuntimeException("catch 中抛出的异常"); } finally{ System.out.println("执行finally"); throw new RuntimeException("finally 中抛出的异常"); } } } 程序执行结果: Exception in thread "main" 执行catch 执行finally java.lang.RuntimeException: finally 中抛出的异常 #如果finally中加入return语句,效果类似。2)finally块不执行的情况:程序中使用退出语句system.exit(-1),硬件故障
package Server; public class testException { public static void main(String[]args){ test(); } public static void test(){ int a=3; try{ int s=a/0; System.out.println(s);} catch(Exception e){ System.out.println("执行catch,即将退出"); System.exit(-1); throw new RuntimeException("catch 中抛出的异常"); } finally{ System.out.println("执行finally"); } } } 执行结果: 执行catch,即将退出
三.如何自定义异常及处理原则
1.自定义异常
对应上面的异常分类, 选择你
b1cc
要自定义的异常父类,我这里以RuntimeException
public class myException extends RuntimeException { public myException(String mseg){ super(mseg); } }2.抛出异常
使用throw关键字抛出异常,如 throw new Exception("my exception.....")
3.处理原则
知道如何处理该异常则在本层进行异常处理,不知道如何处理则抛出异常交给上一层调用者进行处理.
四.异常的其他应用场合
在java中break语句只能退出当前循环,然后对于多层循环无法退出,这时可以巧妙的利用异常进行多层循环退出
public class testException { public static void main(String[]args){ process(); } public static void process(){ int i=0; try{ while(true){ while(true){ i+=1; System.out.println("i="+i); if(i==3) { throw new Exception("退出循环"); } } } } catch(Exception e){ System.out.println("真的退出来了....."); } } } 执行结果: i=1 i=2 i=3 真的退出来了.....
相关文章推荐
- 浅析Java多线程编程中的高级技术-Java基础-Java-编程开发
- 浅析Java的异常处理机制
- Java基础——clone()方法浅析
- java基础-反射浅析(磨砺营马剑威java)
- Java 基础:浅析Java中的final关键字
- 浅析Java多线程程序设计机制-Java基础-Java-编程开发
- Java基础-ArrayList源码浅析
- Java基础知识——容器浅析
- Java 内存分配全面浅析 | Java基础
- Java基础---浅析String,StringBuilder,StringBuffer的区别
- 黑马程序员_毕向东JAVA基础_设计模式&异常处理机制
- 【JAVA基础】浅析JAVA例外处理(转)
- Java基础---异常处理机制
- java基础(15)-- 浅析I/O模型
- java基础入门-多线程同步浅析-以银行转账为例子
- Java基础小技巧回顾--浅析String
- java基础---面向对象浅析
- 【JAVA基础】-异常处理机制
- java基础-反射技术浅析
- 【JAVA - 基础】之Annotation注解浅析