Java的异常处理
2016-05-24 10:13
429 查看
Java把错误和异常都分类了
首先Java把错误分为两大类,都是java.lang.Throwable的子类
java.lang.Error系统级的异常,一般程序很难调试。
java.lang.Exception 程序级的异常,通过代码可以处理
Exception大的方向分为了两种
JVM能指定捕获的的异常java.lang.RuntimeException及其子类,当然也可以直接处理。
JVM不能捕获的异常必须通过程序自动处理,如果不处理程序编译不通过。
try后面可以后有多个catch,多个catch的时候要注意:
子类一定要放在父类的前面,因为父类的引用可以引用子类的对象
java.lang.Exception是一切异常的父类,它就可以处理任何异常(可能信息不太准确)
finally语句块的编写要求
finally作为异常的统一出口,所以在此语句块中的编写尽可能不要出现像throw或return这样的语句,这样可以避免不必要的问题出现。
throws是用来回避异常的
throw和throws的综合应用
RuntimeException可以不使用try…catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。
需要注意的是:当子类重写父类方法的时候,不能throws比父类更多的异常。
除非throws的异常是RuntimeException 。
原理:Java中,父类可以接受任何子类对象,如果子类比父类有更多的约束,那么父类处理了就出现了问题。所以在Java中子父类进行了继承,子类不能比父类有更多的约束。面向对象的设计中有一个里氏替换原则说明的就是这个问题。
首先Java把错误分为两大类,都是java.lang.Throwable的子类
java.lang.Error系统级的异常,一般程序很难调试。
java.lang.Exception 程序级的异常,通过代码可以处理
java.lang.Exception 它是一切程序级异常的父类
java中把所有产生的程序级异常都进行了分类,我们程序中出现的任何异常都能在分类中找到。Exception大的方向分为了两种
JVM能指定捕获的的异常java.lang.RuntimeException及其子类,当然也可以直接处理。
JVM不能捕获的异常必须通过程序自动处理,如果不处理程序编译不通过。
try catch关键字
try{ //业务代码(可能会产生异常) }catch(异常类 异常对象){ //异常处理 }
try后面可以后有多个catch,多个catch的时候要注意:
子类一定要放在父类的前面,因为父类的引用可以引用子类的对象
java.lang.Exception是一切异常的父类,它就可以处理任何异常(可能信息不太准确)
finally关键字
不管有木有异常最终都要执行的语句(有一些资源需要关闭)try{ //有可能产生都要异常}catch(异常类 异常对象){ //编写异常的处理语句 }catch(异常类 异常对象){ //编写异常的处理语句 }finally{ //一定会运行的程序代码 }
finally语句块的编写要求
finally作为异常的统一出口,所以在此语句块中的编写尽可能不要出现像throw或return这样的语句,这样可以避免不必要的问题出现。
throw/throws
throw是某种情况下抛出(制造出)一个异常throws是用来回避异常的
throw和throws的综合应用
//throws class Math { public int div(int i ,int j)throws Exception{ System.out.println("********计算开始*******"); int temp = 0; try { temp=i/j; } catch (Exception e) { throw e; }finally{ System.out.println("********计算计算*******"); } return temp; } } class ThrowDemo02 { public static void main(String[] args) { Math m = new Math(); try { System.out.println("除法操作"+m.div(10,0)); } catch (Exception e) { System.out.println("异常处理" +e); } } }
Exception类与RuntimeException类
Exception在程序中必须使用try…catch来进行处理RuntimeException可以不使用try…catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。
需要注意的是:当子类重写父类方法的时候,不能throws比父类更多的异常。
除非throws的异常是RuntimeException 。
原理:Java中,父类可以接受任何子类对象,如果子类比父类有更多的约束,那么父类处理了就出现了问题。所以在Java中子父类进行了继承,子类不能比父类有更多的约束。面向对象的设计中有一个里氏替换原则说明的就是这个问题。
自定义异常类
定义异常类只需要继承Exception类即可//自定义异常 class MyException extends Exception { public MyException(String msg){ super(msg); } } class DefaultException { public static void main(String[] args) { try { throw new MyException("自定义异常"); } catch (Exception e) { System.out.println(e); } } }
相关文章推荐
- java的若干问题(3)——多线程
- Java获取ClassLoader
- java获取到的时间和本地时间差8小时,教你如何加8小时
- Java设计模式系列之观察者模式
- java两种经典死锁例子,Lock发生死锁案列
- JAVA系统属性
- java中文乱码问题----java不同场景编码转换过程
- Java jar 指定main方法运行
- 【Spring4揭秘 基础1】监听器和事件
- struts2升级文档
- java was started but returned code=13的问题探究
- Eclipse下配置Maven
- Java中的null是个什么东西?
- ROS_Kinetic_08 ROS的集成开发环境(IDEs)之使用Eclipse
- ROS_Kinetic_08 ROS的集成开发环境(IDEs)之使用Eclipse
- ROS_Kinetic_08 ROS的集成开发环境(IDEs)之使用Eclipse
- java UDP编程
- java动态编程-动态编译机制
- UAP框架--开发java项目--添加过滤器
- java之对称加密算法