Java 为什么是“a”;最后";此代码中需要的块
我知道,创建一个try-catch段而不使用 最后一个街区。所以在用这些代码进行黑客攻击时,我不明白 是什么java逻辑(例如规则、理论)迫使我包含finally块 在这段代码中-以及为什么finally块必须包含一个return 其中的声明。换句话说,如果我最终删除 如果完全阻塞,我将收到一个错误,如果替换return语句 在finally块中,使用任何其他内容(例如System.out.printl(“foo”)),I 仍然收到一个错误,坚持要求我包含一个返回语句。再次, 这里写的代码编译和运行都很好。我只是想理解一下 试捕最终构造背后的一点理论(p.s.我理解 这都是关于“异常处理”…但我的问题实际上更多的是关于 代码流和返回语句)Java 为什么是“a”;最后";此代码中需要的块,java,try-catch-finally,Java,Try Catch Finally,我知道,创建一个try-catch段而不使用 最后一个街区。所以在用这些代码进行黑客攻击时,我不明白 是什么java逻辑(例如规则、理论)迫使我包含finally块 在这段代码中-以及为什么finally块必须包含一个return 其中的声明。换句话说,如果我最终删除 如果完全阻塞,我将收到一个错误,如果替换return语句 在finally块中,使用任何其他内容(例如System.out.printl(“foo”)),I 仍然收到一个错误,坚持要求我包含一个返回语句。再次, 这里写的代码编译和
最后考虑没有
的执行路径
int getInt() {
try {
String[] students = {"student1", "student2"};
System.out.println(students[4]);
// no return
}
catch (Exception e) {
return 10; // if an exception occurs
}
// no return
}
那么,如果没有抛出异常会发生什么呢?您将没有返回值
您可以提供一个finally
并在那里放置一个返回,也可以在try catch
块之外放置一个返回
请注意,try catch finally
块中的finally
具有一个return
语句,该语句将取代catch
的return
语句,因为如果执行与其关联的try[-catch]
块,则始终会执行finally
块
int getInt() {
try {
String[] students = {"student1", "student2"};
System.out.println(students[4]);
// the return could be here as well
}
catch (Exception e) {
return 10; // in case of failure
}
return 20; // in case of success
}
所有执行路径必须返回一个值(或引发异常)。最后考虑没有的执行路径
int getInt() {
try {
String[] students = {"student1", "student2"};
System.out.println(students[4]);
// no return
}
catch (Exception e) {
return 10; // if an exception occurs
}
// no return
}
那么,如果没有抛出异常会发生什么呢?您将没有返回值
您可以提供一个finally
并在那里放置一个返回,也可以在try catch
块之外放置一个返回
请注意,try catch finally
块中的finally
具有一个return
语句,该语句将取代catch
的return
语句,因为如果执行与其关联的try[-catch]
块,则始终会执行finally
块
int getInt() {
try {
String[] students = {"student1", "student2"};
System.out.println(students[4]);
// the return could be here as well
}
catch (Exception e) {
return 10; // in case of failure
}
return 20; // in case of success
}
所有执行路径必须以返回值(或引发异常)结束.诀窍是读取错误消息。如果没有finally block,如果没有异常,该方法返回什么?返回20
也可以在try/catch之外,在方法的末尾,或者在try
块的末尾。但是,上面的操作没有错。拥有finally
block修复了编译,但从逻辑上讲,这是一个错误。(我的首选是在方法的末尾。或者在那里放置一条注释,指出返回的位置。
)有人向您提出了一个难题。finally块中的20
(将在catch块之后执行)是否替换10
?[提示:是]return
在finally块中是合法的,但这是一个坏主意。诀窍是读取错误消息。如果没有finally块,如果没有异常,该方法返回什么?返回20也可能在try/catch之外,在方法的末尾,或者在try
块的末尾。没有任何错误但是,上面是如何完成的。使用最终
块修复编译,但从逻辑上讲,这是一个错误。(我的首选是在方法的末尾。或者在那里放置一条注释,指示假定返回
的位置。)有人向你提出了一个难题。finally块中的20
(将在catch块之后执行)是否替换finally块中的10
?[提示:是]return
合法,但这不是一个好主意。或者在try块的末尾放一个return(对我来说是最自然的位置)因此,如果发生错误,则最终块不会执行,因为catch块已返回值。这是否正确?@bbalchev:否。最终块始终会执行。这就是最终块的全部要点。好的,谢谢。从棘手的问题中学习总是很好的。@vee您指的是第一个代码段吗?注意我是如何t说“考虑没有finally
的执行路径”。它不是用来编译的。它说明了如果没有finally
(或其他return
语句)它为什么会失败。或者在try块的末尾放一个return(对我来说最自然的地方)因此,如果发生错误,则最终块不会执行,因为catch块已返回值。这是否正确?@bbalchev:否。最终块始终会执行。这就是最终块的全部要点。好的,谢谢。从棘手的问题中学习总是很好的。@vee您指的是第一个代码段吗?注意我是如何t表示“考虑没有finally
的执行路径”。它不是为了编译。它说明了如果没有finally
(或其他return
语句)它为什么会失败。