Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Try/Catch块和以下语句_Java_Exception_Exception Handling_Try Catch Finally - Fatal编程技术网

Java Try/Catch块和以下语句

Java Try/Catch块和以下语句,java,exception,exception-handling,try-catch-finally,Java,Exception,Exception Handling,Try Catch Finally,我下面的代码有一些问题。在这个程序中,我输入项目的描述、单位和价格。我为用户输入负数的可能性创建了两个自定义异常类。当我运行程序时,catch语句确实可以工作,但我发现奇怪的是,catch块之后的语句仍然可以执行。如果我错了,请纠正我,但是如果出现异常,程序不应该在catch语句之后执行语句吗?我的印象是这样做的唯一方法是使用finally块。任何帮助都将不胜感激 import java.util.Scanner; public class RetailItemDemo { pub

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

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

为了防止这种情况,添加一个
System.exit(0)到catch块

如果还有finally块,则即使关闭catch块中的程序,也会执行finally块

如果我错了,请纠正我,但程序不应该执行吗 如果出现异常,是否在catch语句之后添加语句?我是 在这样的印象下,唯一的办法就是使用 街区

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

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

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

使用System.exit(0);在catch块中。

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

终止该方法中的进一步处理,并取消控制 已传输到最近的可处理该类型的异常处理程序 遇到的异常情况 从这里开始:

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


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

如果异常被“捕获”,则将对其进行处理。关于异常处理的Java教程。非常有用,谢谢!感谢所有回答的人!请注意,终结器不需要运行,也不需要立即运行。这使得使用它们具有潜在的危险性。来源:Robert Bloch,《有效Java》,第二版。@AnubianNoob这里没有关于终结器的内容。@AnubianNoob
finally
块与终结器完全不同。