【发布时间】:2018-03-16 17:40:51
【问题描述】:
有一些第三方代码如下所示。假设有两个类,classA 和 classB,它们的定义是正确的并且按预期工作。
// this function does not have a *throws Exception* in its definition
public Collection<classA> doSomething(String someStr) {
List<ClassA> ClassAList = new ArrayList<ClassA>();
int a = 0;
while (a < 5) {
classAList.add(
new classA(
someStr,
new Callable<classB>() {
public classB call() throws Exception {
// do some work here
try {
// try something new
} catch (Exception e) { // <---- THIS EXCEPTION
// do something exceptional
throw e;
}
// do more work here, because why not?
}
}
)
);
a++;
}
return classAList;
}
这是一个人为的例子,所以它可能并不完全合理。但是,它准确地反映了我拥有的代码。
我想弄清楚的是,如果抛出异常会发生什么?异常突破,整个doSomething函数失败了吗? (我怀疑是这种情况,但是上层函数没有“抛出异常”,所以可能是我错了吗?)
我对Java比较陌生,之前肯定没有见过这种编程风格(另外,如果你知道它叫什么,所以我可以更多地研究它,请告诉我) - 我有C背景和 Python,所以 -__(o.O)__/-
注意:这是对某些东西的扩展,因此不能直接运行以进行调试。
注意 2:此问题被标记为可能与 this 重复。我不是在问如果没有异常抛出子句,它是如何编译的。我正在尝试找出异常发生的位置/时间。
【问题讨论】:
标签: java exception exception-handling