在弄乱Eclipse中的自定义格式设置选项的同时,在示例代码之一中,我看到了如下代码:
/**
* 'try-with-resources'
*/
class Example {
void foo() {
try (FileReader reader1 = new FileReader("file1"); FileReader reader2 = new FileReader("file2")) {
}
}
}
我从未见过try
像这样使用过,并且我从事Java编程已有9年了!有谁知道你为什么要这么做?这样做的可能用例/好处是什么?
我看到的另一段代码,我认为这是一个非常有用的速记,因此我也在这里共享了它,它的作用很明显:
/**
* 'multi-catch'
*/
class Example {
void foo() {
try {
} catch (IllegalArgumentException | NullPointerException | ClassCastException e) {
e.printStackTrace();
}
}
}
它是在Java 7中添加的。它称为try-with-
resources
语句。
/编辑
最好也把它扔在这里。Lock
如果使用如下包装器类,则可以使用try-with-resources语句来管理:
public class CloseableLock implements Closeable {
private final Lock lock;
private CloseableLock(Lock l) {
lock = l;
}
public void close() {
lock.unlock();
}
public static CloseableLock lock(Lock l) {
l.lock();
return new CloseableLock(l);
}
}
try(CloseableLock l = CloseableLock.lock(lock)) { // acquire the lock
// do something
} // release the lock
但是,由于必须为每个资源声明一个变量,因此其优点值得商de。
所以我更新了代码,添加了行所做的是将主线程置于Hibernate状态一段时间,因此jvm可以获得一些时间来创建一个新线程。我正在得到我的预期输出
问题内容: 我通常对JOINS十分熟悉,但这是新的。 假设三个表(两个表的典型情况和第三个链接器表): (出于简化目的,我无法复制实际的结构,这不是我的代码。) 通常,要获得“谁在什么时候买了什么”的表格,我可以这样做: 但是我已经看到了这个: 这是什么?只是另一种语法,还是一种性能技巧? (它在SQLServer,FYI上,但是大概可以应用于其他…) 问题答案: 括号不会改变语义。子句的位置控制
我查看了Java SE API 1.8所做的一些更改,当我查看新方法map.merge时,它展示了一个如何将其与下面一行一起使用的示例 我了解如何使用lambda表达式创建匿名函数接口,但这似乎是使用一个方法作为一个双重功能。我喜欢理解和使用晦涩难懂的java语法,但我在任何地方都找不到这一点。
问题内容: 我今天看了一些Java代码,发现了一些奇怪的语法: 我以为无法编译,并想解决我认为是错字的问题,但是后来我想起Java编译器确实接受了它! 有人可以帮我理解它的意思吗?它是功能数组吗? 问题答案: 这是一个返回的方法。 Java语言规范(8.4方法声明) 为了与Java平台的较早版本兼容,允许使用返回数组的方法的声明形式(将部分或全部)空括号对放置在参数列表之后,该空括号对构成数组类型
问题内容: 我在es-discuss邮件列表中遇到了以下代码: 这产生 为什么这是代码的结果?这里发生了什么事? 问题答案: 了解此“ hack”需要了解几件事: 为什么我们不只是做 如何处理论点 如何处理多个参数 函数如何处理参数 是什么呢 它们是javascript中相当高级的主题,因此它的时间要长得多。我们将从顶部开始。系好安全带! 1.为什么不只是? 什么是数组,真的吗?包含整数键的常规对
我发现了Java并发的奇怪行为。请参阅下面的下一段代码: 在我看来,这段代码应该挂起并永远等待,但是在控制台中的next out没有任何问题地完成了代码: 我试图找到一些关于如果线程死了通知锁的信息,但缺乏。我也没有在Java规范中找到任何信息。 但是如果我试图锁定其他对象(而不是thread对象),就会像我预期的那样工作得很好。