您的位置:首页 > 编程语言 > Java开发

Java的异常处理

2016-05-24 10:13 429 查看
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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: