我对使用try/catch/finally子句有疑问,让我解释一下:我知道每个在其声明中声明异常规范的方法都必须(在调用方法中)被一个try块包围,然后是一个可以捕获该异常的catch块(除非我没有声明调用方法也抛出异常)。如果调用方法在try-catch之后有其他语句,则无论发生什么情况(是否引发异常),都会执行这些语句。如果我有以下代码:
public class ExceptionCall {
Throwing t = new Throwing();
public void methodTry(){
while(true){
try {
if (t.flag++==0)
t.throwing();
System.out.println("no exception");
}
catch (MyException e) {
e.printStackTrace(System.err);
System.out.println("working on it!");
}
finally{
System.out.println("finally clause");
}
System.out.println("out");
if (t.flag==2)
break;
}
}
}
这里有一个名为(猜猜看:)Throwing()的方法,该方法被声明为抛出一个MyException异常,并有一个名为flag的公共字段,其中包含一个初始化为0的int,以提供一种条件检查。
因此,无论try块中发生了什么,都会有几次执行受保护区域之外的代码。
所以我的问题是,最后的障碍是什么??我的意思是,我知道当调用方法从try或catch块返回时,它很有用(在这种情况下,我可以在catch中有一个break语句,finally将被执行),但是在这样的情况下,有什么区别呢??
最后,块用于处理那些需要您在语句末尾进行一些操作的资源,无论代码中发生什么。
例如:读卡器或流是使用后必须关闭的资源,但在使用过程中可能会发生异常,所以在哪里关闭它们???
这里是最后一个子句变得非常方便的地方:
FileReader reader;
try {
reader = new FileReader("someNonExistingFile");
} catch (FileNotFoundException e) {
// handle FileNotFoundException
e.printMessage();
} finally {
// reader MUST BE CLOSED ALWAYS, so FINALLY, CLOSE IT
reader.close();
}
在此示例中,您需要始终关闭阅读器(如果文件存在,如果文件不存在),因此,您使用而不是关闭它两次(在
。try
和catch
中)最后
最后在这里提供更多信息和示例。还要检查try with resources(Java 7)。
finally块总是在try块退出时执行。这确保即使发生意外异常,也会执行finally块。但最后,它不仅仅适用于异常处理,它允许程序员避免清理代码被返回、继续或中断意外绕过。将清理代码放在finally块中始终是一种好做法,即使在没有预期异常的情况下也是如此。
请参阅:https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html
问题内容: 当try块中存在时,我对try- finally执行感到困惑。据我了解,finally块将始终执行,即在返回调用方法之前。在考虑以下简单代码时: 实际打印的结果为1。这是否意味着不执行finally块?有人可以帮我吗? 问题答案: 从块返回时,返回值存储在该方法的堆栈帧中。之后,将执行finally块。 更改finally块中的值不会更改堆栈中已存在的值。但是,如果您从finally块
问题内容: 在此Java代码中, 我期望的输出是 但是有时候我得到这个预期的输出,而在其他时候我得到以下输出: 有时甚至是这个输出: 以及我是否获得第一,第二或第三输出似乎在每次执行期间都是随机发生的。我发现此POST显然在谈论相同的问题,但我仍然不明白为什么有时会得到输出1、2或3。如果我正确理解了这段代码,那么输出1应该是我每次得到的(发生异常) )。如何确保始终如一地获得输出1,或者能够确定
问题内容: 我试图在Java中实现一个非常简单的Trie,该Trie支持3种操作。我希望它具有一个insert方法,一个has方法(即trie中的某个单词)和一个toString方法以字符串形式返回trie。我相信我的插入工作正常,但是has和toString证明很困难。到目前为止,这就是我所拥有的。 特里类。 和节点类 因此,基本上,在创建Trie时,将创建一个TrieNode作为具有26个子级
问题内容: 在下面的代码中,我试图一次性进行多个(大约10个)HTTP请求和RSS解析。 我在需要访问和解析结果的URI数组上使用标准构造。 码: 我了解一次调用函数时,应该使用回调。但是,在此示例中,我唯一想到使用回调的方法是调用一个函数,该函数对被调用的次数进行计数,并且仅在被调用的次数与看起来很hacky 的次数相同时才继续。 所以我的问题是, 在node.js中处理这种情况的最佳方法 是
该程序的输出: 是: 为什么当 开始时 不是 1?
我正在尝试使用testng.xml执行testcases。我已经将所有的测试运行类放在一个测试中。在执行时,我注意到第二类(仪表板类)的@beforeTest方法首先执行。我希望执行所有类的@beforeTest方法,以与testng.xml文件中的类相同的执行顺序执行。请看下面的图片。 对于我在提到的类中使用的所有@beforeTest和@beforeClass我都使用了waysrun=true