我有两个函数引发异常:
public void foo() throws Exception {
// something
}
public void bar() throws Exception {
// something
}
若在lambda表达式中使用花括号组合这些函数调用,则需要try/catch来处理异常。
public void someFunction() throws Exception {
someList.forEach(e -> {
// Show compile error and need try/catch
foo();
bar();
});
}
然而,若我合并到for循环中,就可以了。
public void someFunction() throws Exception {
for (SomeElement e : someList) {
foo();
bar();
}
}
我认为由于创建了新的闭包(使用括号),所以需要try/catch,但在for循环中,它不需要。我只使用for循环解决了这个问题,但我想知道为什么会发生这种情况。
List#foreach
期望消费者
。
消费者
是一个(单抽象方法)接口,如下所示(简化):
@FunctionalInterface
public interface Consumer<T>{
void accept(T t);
}
如您所见,accept
不会抛出任何选中的异常。
lambda表达式是该接口的实现,因此无论其他代码做什么,它都不会引发任何异常。
是否由于编译器假定它将在此实例中返回一个int值,所以即使抛出了异常,也不能返回异常?
我读了很多关于Java异常处理的帖子,但我确实得到了满意的答案,为什么我要把它们放在我的代码中呢? 我想使用JRE的一些api方法,这些方法是用检查的异常进行的。所以如果我想使用它们,我需要抛出或捕获异常(例如java I/O)。这是在我的类中使用异常的合理规则吗? 我听说了这件事 Java异常处理使错误处理代码与我的业务逻辑分离 在下面的代码段中,分离错误处理的位置在哪里? 3.Java默认的异
问题内容: 要编译此代码,我可以: 将我的通话置于try / catch块中,或 已经声明它可以抛出一个。 为什么我必须这样做? (示例代码来自Kathy Sierra的SCJP书 。) 我知道引发的异常是已检查的异常,因此我必须处理它,但是在什么情况下需要引发此异常? 问题答案: 如果以一种可以引发检查异常的方式声明方法(不是的子类),则调用该方法的代码必须在一个块中调用它,否则调用者方法必须声
问题内容: 当我运行以下代码时: 我希望按以下顺序获得输出: 但是我得到的却是相反的顺序: 谁能解释为什么输出顺序相反? ================ 另外,当我创建多个的实例时: 静态块 仅 在第一次执行。 问题答案: 这完全取决于初始化语句的执行顺序。您的测试表明此顺序为: 静态初始化块 实例初始化块 建设者 编辑 感谢您的评论,现在我可以引用JVM规范中的相应部分。这是详细的初始化过程。
有人能正确解释事件时间戳和水印吗。我从文件中理解了,但不太清楚。一个真实的例子或外行的定义会有所帮助。此外,如果可能,请给出一个示例(以及一些可以解释它的代码片段)。提前感谢
问题内容: 我已经准备好参加Java认证考试,并且在其中一项练习测试中看到了类似的代码: 我的问题是…在方法外用花括号编写代码是否有效?这些(如果有)有什么影响? 问题答案: 从这里借来的- 通常,您需要将代码放在构造函数中以初始化实例变量。使用构造函数初始化实例变量有两种选择:初始化块和final方法。实例变量的初始化块看起来像静态初始化块,但没有static关键字: Java编译器将初始化程序