尝试/捕获块和以下语句

时间:2014-04-24 21:37:53

标签: java exception exception-handling try-catch-finally

我在下面的代码中遇到了一些问题。在此程序中,我输入项目的描述,单位和价格。我为用户输入负数的可能性制作了两个自定义异常类。当我运行程序时,catch语句确实有效,但我发现奇怪的是catch块之后的语句仍然执行。如果我错了,请纠正我,但如果有异常,那么不应该在catch语句之后执行语句吗?我的印象是,唯一的方法是使用finally块。任何帮助将不胜感激!

  import java.util.Scanner;

public class RetailItemDemo
{
    public static void main (String[] args)
    {
        Scanner keyboard = new Scanner(System.in);
        RetailItem item = new RetailItem();

    System.out.print("Item description: ");
    item.setDescription(keyboard.nextLine());

    try 
    {
        System.out.print("Units on hand: ");
        item.setUnitsOnHand(keyboard.nextInt());

        System.out.print("Item price: ");
        item.setPrice(keyboard.nextDouble());
    }

    catch (NegativeUnitsException nue)
    {
        System.out.println(nue);
    }

    catch (NegativePriceException npe)
    {
        System.out.println(npe);
    }

    System.out.println("\nThe item is a  " + item.getDescription());
    System.out.println("There are " + item.getUnitsOnHand() + " units on hand");
    System.out.println("The item price is " + item.getPrice() + "\n");
 }
}

4 个答案:

答案 0 :(得分:1)

  

如果我错了,请纠正我,但不是不应该执行的程序   如果有异常,catch语句后的语句?我曾是   在印象中,唯一的方法就是使用终极   块。

我怕你错了。 try-catch的要点是我们在try中执行可能失败的一些代码。如果抛出异常,那么我们处理catch块中的失败,然后正常继续(而不是将异常传播到更高级别,可能退出整个程序),在catch之后执行任何进一步的代码块。

无论是否抛出异常,都会执行finally块中的代码。这用于关闭需要清理的资源(例如打开的文件)。

如果要在抛出异常后跳过所有内容,则无法使用try-catch处理异常。您最好在更高级别处理异常(尽管在您的示例中,您已经处于最高级别,即main)。

答案 1 :(得分:0)

当一个方法在try块中抛出异常时,它会跳过try块中的所有其他方法,执行catch块,然后从catch块后面的下一行继续。

为防止这种情况,请向catch块添加System.exit(0);

如果你还有一个finally块,即使你在catch块中关闭程序也会执行它。

答案 2 :(得分:0)

Java使用异常处理的终止模型,它基本上就像你经历过的那样:

  

终止该方法中的进一步处理并进行控制   转移到可以处理该类型的最近的异常处理程序   遇到的异常   从这里:http://www.informit.com/articles/article.aspx?p=464630&seqNum=4

当异常处理程序(catch块)完成处理try / catch块之后的第一行代码连续执行时。

在异常处理的恢复模型中,在处理异常之后,流程返回抛出异常的位置,程序从那里继续。

答案 3 :(得分:-1)

使用System.exit(0);在拦截区内。