Заключительные потоки в Java

Просто нет способа обнаружить это, так как нет разницы в скомпилированном байт-коде.

Класс с конструктором по умолчанию

class AClass { } // will have a default no args constructor 

неявно компилируется как

class AClass { 
    AClass() {}
}

Первая форма - просто синтаксический сахар.

Также ваш следующий пример

class AClass {
    private final int i;

    public AClass() { i = 0; }
}

Может быть записан с конструктором по умолчанию в эквивалентной форме

class AClass {
    private final int i = 0;
}

Кроме того, я не вижу варианта использования, когда вам придется обнаружить это.

52
задан Jonathan Leffler 2 February 2014 в 11:36
поделиться

6 ответов

Дескрипторы файлов являются недостаточными, конечными ресурсами. У можно закончиться они, если Вы не очищаете их правильно, точно так же, как соединения с базой данных.

, Если Вы записали небольшую программу со всего одним пользователем, можно сойти с рук то, чтобы быть неаккуратным и не приближающимся наконец блок.

, Но если Вы заканчиваете тем, что использовали ту идиому в приложении, которое имеет многих пользователей и дескрипторы файлов, у Вас могла бы быть проблема.

"Первый мы делаем наши привычки, затем они делают нас". Я пытаюсь применить лучшие практики, даже когда они не необходимы.

45
ответ дан duffymo 7 November 2019 в 09:10
поделиться

Да, когда процесс завершится, неуправляемые средства будут высвобождены. Для InputStreams это прекрасно. Для OutputStreams Вы могли потерять буферизированные данные, таким образом, Вы должны по крайней мере сбрасывать поток прежде, чем выйти из программы.

36
ответ дан Jon Skeet 7 November 2019 в 09:10
поделиться

Чувак. Если Вы не закроете свой поток, то Ваш модульный тест перестанет работать. Или по крайней мере, это должно. Так, вот почему необходимо закрыть его. ;)

И в то время как ОС почти наверняка вымоется, если Вы просто выйдете, они будут обычно освобождаться быстрее, если Вы явно закроете их. Кроме того, что, если Ваш код заканчивается в продолжительной программе когда-то в будущем? Затем они будут иметь проблемы и проклянут Вас. :(

Так, это похоже на промывку Ваших рук после использования ванной. В конечном счете кто-то заплатит цену, если Вы не сделаете этого. Можно выйти сухим из воды некоторое время, но это - все еще хорошая практика.

25
ответ дан Don Branson 7 November 2019 в 09:10
поделиться

В дополнение к ответу Jon это обычно - хорошая идея закрыть любой ресурс.

Думают о соединении с базой данных. Вашей базе данных нельзя было открыть бесконечные соединения, в этом случае когда Вам не нужна она, лучше, что Вы закрываете ее, как только Вы сделаны с нею.

также хорошо сделать это привычкой. "наконец" блок является Вашим другом. В случае C++ можно также использовать RAII для управления этим автоматически .

10
ответ дан Community 7 November 2019 в 09:10
поделиться

Вид. Поток поддерживается "реальным" дескриптором файла операционной системы, и когда процесс завершится, ОС очистит любые открытые дескрипторы файлов.

Так или иначе, это - хорошая практика, чтобы всегда закрыть Ваши ресурсы, когда Вы сделаны, так закройте потоки :)

7
ответ дан Joao da Silva 7 November 2019 в 09:10
поделиться

Если Вы не закрываете потоки, у Вас могут быть проблемы при открытии их, создают резервную копию снова. Это особенно верно, если они зависают от конца сокетов.

Закрытие потока также удостоверяется, что данные сбрасываются через поток, если существуют какие-либо данные, оставленные отправить.

6
ответ дан Philip Reynolds 7 November 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: