我在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块中,该块可以防止因崩溃程序而导致的任何错误。这让我得出结论,给我这个代码的骨架类的人不希望异常崩溃程序。
答案 0 :(得分:4)
如果正在打印异常消息但程序没有崩溃,则意味着调用堆栈上的代码正在捕获该异常,打印其消息,然后吞下它。也就是说,某个地方的呼叫者中有一个try-catch
块。
你应该使用调试器来破坏你的循环并查看调用堆栈,然后检查所有调用函数的代码以找到try-catch
。