Try/Catch块和以下语句



下面的代码有一些问题。在这个程序中,我输入项目的描述、单位和价格。我为用户输入负数的可能性创建了两个自定义异常类。当我运行程序时,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");
 }
}

如果我错了,请纠正我,但程序不应该执行吗catch语句之后的语句是否存在异常?我是以为唯一的办法就是使用finally块

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

无论是否引发异常,都会执行finally块中的代码。这用于关闭无论发生什么情况都需要清理的资源(如打开的文件)。

如果您想在抛出异常后跳过所有内容,那么使用try-catch处理异常是没有意义的。您最好在更高级别处理异常(尽管在您的示例中您已经处于顶级级别,即main)。

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

为了防止这种情况,在捕获块中添加一个System.exit(0);

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

Java使用异常处理的终止模型,它的行为基本上与您所经历的一样:

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

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

在异常处理的恢复模型中,处理完异常后,流返回到抛出异常的位置,程序从那里开始连续。

使用System.exit(0);在挡块内。

相关内容

  • 没有找到相关文章

最新更新