Кто управляет открытием/закрытием System.in/System.out?

Известно, что System.in и System.out это InputStream и PrintStream соответственно. Таким образом, это потоки java.io.

Когда мы работаем с потоками, мы должны открывать и закрывать их. Также мы должны поймать много исключений. Когда мы работаем с System.in и System.out, мы избавлены от этих занятий.

Кто выполняет эти действия вместо нас? и когда (при каких условиях?) потоки открываются/закрываются?


person gstackoverflow    schedule 03.09.2014    source источник


Ответы (1)


Сама среда выполнения Java («интерпретатор») отвечает за открытие этих дескрипторов до того, как ваш код начнет выполняться.

Таким образом, они доступны, как только вы введете main(). Если вы не закроете их самостоятельно, они останутся открытыми в течение всей программы.

person paxdiablo    schedule 03.09.2014
comment
и это ОС до этого; в системе есть установщики, где среда выполнения Java устанавливает экземпляры InputStream и PrintStream, которые обертывают базовые потоки уровня ОС. Если, конечно, кто-то не пойдет и не вызовет самих сеттеров :) - person Chris K; 03.09.2014
comment
И поскольку JVM открыла их, можно утверждать, что только JVM должна их закрывать. - person Raedwald; 22.06.2015
comment
@Raedwald, я не предлагал их закрывать, хотя при некоторых обстоятельствах это, безусловно, допустимо. Я просто дал полный ответ на вопрос «когда (при каких условиях?) потоки открываются/закрываются?». - person paxdiablo; 23.06.2015