Новый/странный синтаксис Java "try()"?
В то время как возиться с настраиваемыми параметрами форматирования в 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();
}
}
}
Ответы
Ответ 1
Он был добавлен в Java 7. Он вызвал оператор try-with-resources.
/изменить
Можно также бросить это здесь. Вы можете использовать оператор try-with-resources для управления Lock
, если вы используете класс-оболочку следующим образом:
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
Однако, поскольку вы должны объявить переменную для каждого ресурса, преимущество этого является спорным.
Ответ 2
Это новый Java-запрос с инструкциями для Java 7: http://download.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html
Ответ 3
Это изменения, внесенные в JDK7.
Первый оператор - это try-with-resources. Я не знаю точно, почему они существуют, но исключения часто вызваны входными потоками и т.д., Я думаю, это просто улучшает читаемость. Редактировать: спасибо другим ответчикам, я прочитал javadoc, и теперь я знаю, что он закроет все потоки ввода-вывода, которые реализуют AutoCloseable, опустив необходимость в блоке finally
во многих ситуациях
Во-вторых, это многопользовательский режим, который очень удобен, когда у вас есть разные исключения, которые вы обрабатываете точно так же.
Ответ 4
Он называется try-with-resource. Это способ, чтобы не очищать после себя, поскольку язык сделает это за вас.
Ответ 5
он был добавлен в java 7. Он называется try с ресурсами. Попробуйте с помощью функции описания ресурсов, которая была введена в версии java 7. Попробуйте с помощью оператора ресурса - это оператор try, который объявляет одно или несколько операторов. Ресурс - это объект, который должен быть закрыт после завершения программы.
Перед java 7 мы используем finally block, чтобы закрыть ресурсы, которые мы использовали в нашей программе. В последнем блоке мы должны закрыть все ресурсы вручную, которые мы использовали в нашей программе.
Для получения дополнительной информации вы можете посетить попробовать с ресурсами
Ответ 6
Это вызвано с попыткой с ресурсами. в попытке с помощью ресурсов любой закрываемый поток, объявленный в разделе ресурсов, будет закрыт после выполнения инструкции try. Так что это в значительной степени
try{
InputStream is;
//Stuff
}finally{
is.close()
}
Ответ 7
Такое же использование, как using(Resource)
в C Sharp
, что означает, что этот ресурс будет автоматически перерабатываться, когда ваша программа заквашивается из этого блока кода (только мое мнение)
Оператор try-with-resources обеспечивает закрытие каждого ресурса в конце оператора. Любой объект, который реализует java.lang.AutoCloseable, который включает все объекты, которые реализуют java.io.Closeable, может использоваться как ресурс
Заявление о пробном использовании ресурсов
Ответ 8
Оператор try-with-resources является оператором try, который объявляет один или несколько ресурсов. Ресурс - это объект, который должен быть закрыт после завершения программы. Оператор try-with-resources обеспечивает закрытие каждого ресурса в конце оператора. Любой объект, который реализует java.lang.AutoCloseable, который включает в себя все объекты, которые реализуют java.io.Closeable, может использоваться в качестве ресурса.