Java:抛出异常后程序不会崩溃

cho*_*on4 1 java exception

我在 while 循环的每次迭代中都进行了异常处理。由于某种原因,当抛出异常的条件为真时,会显示异常消息,但程序仍继续运行而不会中断。我以前从未见过这种情况发生,怀疑这是因为 while 循环。我必须在每次迭代时检查队列中是否存在空对象。另一个线程建议使用 try 子句,因此我更改了代码以使用 try 子句,但我仍然得到相同的结果。抛出异常但程序不会崩溃。是什么原因造成的?

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

编辑2:

使用 isEmpty() 也不起作用:

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

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

编辑3:

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

mer*_*011 5

如果正在打印异常消息但程序没有崩溃,则意味着调用堆栈上某处的代码正在捕获该异常,打印其消息,然后吞掉它。也就是说,try-catch某个地方的调用者出现了阻塞。

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