Подтвердить что ты не робот

Новый/странный синтаксис 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();
        }
    }
}
4b9b3361

Ответ 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

Однако, поскольку вы должны объявить переменную для каждого ресурса, преимущество этого является спорным.

Ответ 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, может использоваться в качестве ресурса.