Java Try/Catch块和以下语句
我下面的代码有一些问题。在这个程序中,我输入项目的描述、单位和价格。我为用户输入负数的可能性创建了两个自定义异常类。当我运行程序时,catch语句确实可以工作,但我发现奇怪的是,catch块之后的语句仍然可以执行。如果我错了,请纠正我,但是如果出现异常,程序不应该在catch语句之后执行语句吗?我的印象是这样做的唯一方法是使用finally块。任何帮助都将不胜感激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
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这里没有关于终结器的内容。@AnubianNoobfinally
块与终结器完全不同。