XF文章笔记之《Java异常》重视异常(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33127597/article/details/83147442

在编写代码时,要重视异常,不可忽视异常,也不要遮掩异常,对返回的异常信息要全部返回

重视异常

当产生异常的时候不去捕获,会发生什么?
在执行代码时,代码发生异常没去捕获,线程就会停止。而异常信息没有返回的话,
连出错的地方都很难找。

在JAVA中,发生异常后,主要是:

1.捕获并处理,防止进一步转播。
2.捕获在抛出它,给调用端去处理。
3.不捕获这个异常,随他怎么去传播。

举例
例如:捕获了异常,而没有去处理,将异常吞噬了,这样很可怕

   public  void m1(){
           try {
               
           }catch (Exception e){
               
           }
       }

这样捕获了异常,没有区处理,这样代码会继续执行,和没有发生异常一样,代码将异常吞噬了。

刚开始不知道如何去处理异常,只要应该将异常存储到日志文件中,

public  void m1(){
           try {
               
           }catch (Exception e){
              System.out.println(e); 
              LogException(e);
           }
       }

这样做只能将测试的异常存储,无法记录未发生的异常。如果想要发现测试过程中未发生的异常,就需要去
查找整个程序源码,在打印System.out.println语句应该替换为异常处理代码。

用printStackTrace可以将异常打印在控制台

public  void m1(){
           try {
               
           }catch (Exception e){
              System.out.println(e); 
              e.printStackTrace(System.err);
           }
       }

最好的办法就是去处理异常

不要遮掩异常

在处理先前异常时,如果catch和finally都抛出异常了,finally就会将catch的异常遮掩,只会剩下最后一个异常传给调用端。
如果你想知道函数失败的罪魁祸首,最好不要遮掩异常。

  • 示例
public class Hidden {

    public static void main(String[] args) {
        Hidden hidden = new Hidden();
        try {
            hidden.foo();
        }catch (Exception e){
            System.out.println("In main:" + e.getMessage());
        }
    }

    public void foo() throws  Exception{
        try {
            throw new Exception("first Exception");   //1
        }catch (Exception e){
            throw new Exception("Second Exception");  //2
        }finally {
            throw new Exception("Third Exception");   //3
        }
    }
}

最后只会输出 In main:Third Exception
因为2将1的异常遮掩了,3将2的异常遮掩了,最后只返回3的异常给调用端。
其他异常都被丢弃了。

修改下代码

public static void main(String[] args) {
        Hidden hidden = new Hidden();
        try {
            hidden.foo();
        } catch (Exceptions e) {
            System.out.println("In main:" + e.getException());
        }
    }

    public void foo() throws Exceptions {
        Vector vector = new Vector(2);
        try {
            int i = 2 / 0;
        } catch (ArithmeticException e){
            vector.add(e);
            try {
                int j = Integer.parseInt("e");
            }catch (NumberFormatException ee) {
                vector.add(ee);
            }
        }  finally {
           if(vector.size()!=0){
               throw new Exceptions(vector);
           }
        }
    }
public class Exceptions extends  Exception {
    private Vector vector;

    public Exceptions(Vector vector) {
        this.vector = vector;
    }

    public Vector getException(){
        return vector;
    }
}

将可能发生的异常放入一个list中,最后再将多个异常返回去。这个只是个举例,例子有点俗。

  • 不积跬步,无以至千里 每天一点点。

猜你喜欢

转载自blog.csdn.net/qq_33127597/article/details/83147442
今日推荐