Просто нет способа обнаружить это, так как нет разницы в скомпилированном байт-коде.
Класс с конструктором по умолчанию
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;
}
Кроме того, я не вижу варианта использования, когда вам придется обнаружить это.
Дескрипторы файлов являются недостаточными, конечными ресурсами. У можно закончиться они, если Вы не очищаете их правильно, точно так же, как соединения с базой данных.
, Если Вы записали небольшую программу со всего одним пользователем, можно сойти с рук то, чтобы быть неаккуратным и не приближающимся наконец блок.
, Но если Вы заканчиваете тем, что использовали ту идиому в приложении, которое имеет многих пользователей и дескрипторы файлов, у Вас могла бы быть проблема.
"Первый мы делаем наши привычки, затем они делают нас". Я пытаюсь применить лучшие практики, даже когда они не необходимы.
Да, когда процесс завершится, неуправляемые средства будут высвобождены. Для InputStreams это прекрасно. Для OutputStreams Вы могли потерять буферизированные данные, таким образом, Вы должны по крайней мере сбрасывать поток прежде, чем выйти из программы.
Чувак. Если Вы не закроете свой поток, то Ваш модульный тест перестанет работать. Или по крайней мере, это должно. Так, вот почему необходимо закрыть его. ;)
И в то время как ОС почти наверняка вымоется, если Вы просто выйдете, они будут обычно освобождаться быстрее, если Вы явно закроете их. Кроме того, что, если Ваш код заканчивается в продолжительной программе когда-то в будущем? Затем они будут иметь проблемы и проклянут Вас. :(
Так, это похоже на промывку Ваших рук после использования ванной. В конечном счете кто-то заплатит цену, если Вы не сделаете этого. Можно выйти сухим из воды некоторое время, но это - все еще хорошая практика.
В дополнение к ответу Jon это обычно - хорошая идея закрыть любой ресурс.
Думают о соединении с базой данных. Вашей базе данных нельзя было открыть бесконечные соединения, в этом случае когда Вам не нужна она, лучше, что Вы закрываете ее, как только Вы сделаны с нею.
также хорошо сделать это привычкой. "наконец" блок является Вашим другом. В случае C++ можно также использовать RAII для управления этим автоматически .
Вид. Поток поддерживается "реальным" дескриптором файла операционной системы, и когда процесс завершится, ОС очистит любые открытые дескрипторы файлов.
Так или иначе, это - хорошая практика, чтобы всегда закрыть Ваши ресурсы, когда Вы сделаны, так закройте потоки :)
Если Вы не закрываете потоки, у Вас могут быть проблемы при открытии их, создают резервную копию снова. Это особенно верно, если они зависают от конца сокетов.
Закрытие потока также удостоверяется, что данные сбрасываются через поток, если существуют какие-либо данные, оставленные отправить.