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

时间:2014-10-20 23:54:53

标签: java exception-handling

我在while循环的每次迭代中都进行了异常处理。由于某种原因,当抛出异常的条件为真时,将显示异常消息,但程序会不间断地继续运行。我以前从未见过这种情况,并怀疑是因为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  {

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

编辑3:

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

1 个答案:

答案 0 :(得分:4)

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

你应该使用调试器来破坏你的循环并查看调用堆栈,然后检查所有调用函数的代码以找到try-catch