Java异常,在捕获后仍然打印出什么

时间:2018-11-17 00:51:55

标签: java exception exception-handling

我正在使用一些异常,但是即使抛出并捕获了一个异常,它也会继续输出catch块之后的内容。

我希望抛出的异常被捕获,并且只打印出捕获主体中的内容,除非没有异常,然后移至最后一个souf。

尽管如此,当我有例外时,我的捕捞体会被打印,但随后也将被打印出来。

我如何组织这些例外?

-------引发异常的方法

   public double getHeight() throws ExceptionCheck {
        //if end point is not set, return -1 (error)
        if(points[1] == null){
            throw new ExceptionCheck("The height cannot be calculated, the end point is missing!\n\n");
        } else {
            double height = points[1].getY() - points[0].getY();
            return height;
        }
    }

-------处理getHeight引发的方法

@Override
public double getArea() {
    //if end point is not set, return -1 (error)

    double area = 0;

    try {
        area = getHeight() * getWidth();
    }
    catch(ExceptionCheck e){
        System.out.printf("The area cannot be calculated, the end point is missing!\n\n");
    }

    return area;
}

----------这里不应该打印渔获量之后的最后一个SOUF,但无论如何都要打印

private static void printArea(Shape shape) {
    System.out.println("Printing area of a " + shape.getClass().getSimpleName());

    double area = 0d;
    // Get area of the shape and print it.
    try {
        area = shape.getArea();
    }
    catch(ExceptionCheck e){
        System.out.printf(e.getMessage());
    }
   System.out.println("The area is: " + area);
}

1 个答案:

答案 0 :(得分:3)

catch的工作方式不是这样。如果在出现异常时不应打印该记录,则您必须必须将其移至try的正文中。喜欢,

// Get area of the shape and print it.
try {
    double area = shape.getArea();
    System.out.println("The area is: " + area); // <-- if the previous line throws
                                                // an exception, this will not print.
}
catch(ExceptionCheck e){
    System.out.printf(e.getMessage());
}

您的方法getArea实际上不是throw的{​​{1}}。它打印并吞下它。对于上面的Exception要被调用,您还必须像这样修改catch

getArea