有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:引发异常后程序未崩溃

我在while循环的每次迭代中都会进行异常处理。由于某些原因,当引发异常的条件为true时,将显示异常消息,但程序将保持运行而不中断。我以前从未见过这种情况,我怀疑这是因为while循环。我必须在每次迭代中检查队列中是否存在空对象Another thread suggested using a try clause,所以我将代码更改为使用try子句,但仍然得到相同的结果。将引发异常,但程序不会崩溃。这是什么原因造成的

Purchase ownedShares;
while (numSharesToSell > 0) {
  try  {
    ownedShares = q.peek();
  }
  catch(NullPointerException ex) {
    throw new IllegalArgumentException("Not enough shares");
  }

编辑2:

使用isEmpty()也不起作用:

Purchase ownedShares;
while (numSharesToSell > 0) {
  if (q.isEmpty())
    throw new IllegalArgumentException("Not enough shares");
  else
    ownedShares = q.peek();
 // try  {

这里的核心错误不是没有执行异常。它正在执行,并且正在打印消息“股份不足”。问题是,当这种情况发生时,程序不会停止。外部循环继续

编辑3:

我正在修改的方法调用被包装在一个try/catch块中,它可以防止我抛出的任何错误导致程序崩溃。这让我得出结论,给我这个代码的骨架类的人不希望异常使程序崩溃


共 (1) 个答案

  1. # 1 楼答案

    如果正在打印异常消息,但程序没有崩溃,这意味着调用堆栈中的某个地方的代码正在捕获该异常,打印其消息,然后将其吞没。也就是说,在调用程序的某个地方有一个try-catch

    您应该使用调试器在循环内部中断并查看调用堆栈,然后检查所有调用函数的代码以找到try-catch