粗浅的科普java异常机制

来源:互联网 发布:淘宝童装店取名 编辑:程序博客网 时间:2024/05/16 10:53

By U___0:

浅谈一下自己对java异常机制的理解:

异常存在的意义在于更好的修复bug,找出错误点。另外,在即便出了bug也能按照我们想要的方式继续程序(比如完成某些操作,或者直接退出之类的)

在具体的某个方法中,我们可以利用throw关键字,在完成某种异常的判定(例如:if(除数==0)throw new 一个除零异常)下抛出某个已经被定义的异常。

这里我们先自定义一个异常


//这个自定义异常没有做什么工作,
//只是提供了一个printMessage方法输出一些信息             
//by U__0

public class MyException extends Exception{
    private String str=null;
    public MyException(){
        this.str = "Something wrong!";
    }
    public void printMessage(){
        System.out.println(str);
    }

}

在特定方法中我们可以调用 throws new MyException()来抛出这个异常

然而异常不是抛出就可以不管了,

而对于异常,据我所了解的有两种处理方式

一:就地解决,不留痕迹  而这也就是常说的try {} catch(Exception e){}语句

这里我们举一个除零错误的例子

很明显这里fun计算x/y并返回垓值,

    public int fun(int x,int y){
        if (y==0){//除数为零时我们我们抛出异常
            try {
                throw new MyException();
            } catch (MyException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();//这里我们可以换成该异常的其他任意方法,例如此处我们可以换成e.printMessage();这里也就是我们对异常的处理操作
            }
        }
        return x/y;
    }

二:声明这个方法throws某些异常,这些异常都是该方法内可能抛出的未处理的异常

也就是说,在该方法内我们可以不去处理这个异常,默认调用这个方法的地方一定会处理该异常,

我们形象一点说,我下面有人帮我办事,而我也在为别人办事,下面的人办的事可能出了岔子,我可以说有的事情自己可以直接摆平(try{}catch(SomeException){}),但有些是我不知道上面的人想怎样解决,索性我就不管,我说我这里可能出某些岔子,哥们你托我办的事你自己盯着点(throws SomeException)。

那么按照这种理念我们重写一下该方法

    public int fun(int x,int y) throws MyException{                  //这里我们throws 的异常可能是我们调用的子方法抛出的异常,也可能是我们判定某些条件自行throw的异常

                                                                                           //对于异常我们可以自己处理try{}catch(Exception){},也可以不处理交由调用者处理,此时应像该代码一样声明throws

                                                                                           //所有未处理的可能抛出的异常

        if (y==0){
            throw new MyException();}
        return x/y;
    }


/**
 * 这个类用于测试,另外有一个测试方法fun计算整数除法,会抛出一个我们定义的除零异常
 * @author U__0
 *
 */
public class Test {
    public static int fun(int x,int y) throws MyException{
        if(y==0)throw new MyException("除零错误");
        return x/y;
    }
    public static void main(String[] args){
        int a = 1;
        int b = 0;
        try {
            int c = fun(a,b);
        } catch (MyException e) {
            // TODO Auto-generated catch block
            e.printMessage();
        }
    }
}






0 0
原创粉丝点击