2014-09-03 6 views
1

Известно, что System.in и System.out - это InputStream и PrintStream соответственно. Таким образом, это потоки java.io.Кто управляет открытием/закрытием System.in/System.out?

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

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

ответ

1

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

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

+0

и это ОС до этого; в системе есть среда, где Java Runtime устанавливает экземпляры InputStream и PrintStream, которые обертывают базовые потоки уровня ОС. Если, конечно, не идет речь, и звонит самим сеттерам :) –

+0

И поскольку JVM открыл их, можно утверждать, что [только JVM должен закрыть их] (http://stackoverflow.com/a/7457737/545127). – Raedwald

+1

@ Raedwald, я не предлагал, чтобы они были закрыты, хотя, конечно, это действительно так, чтобы сделать это при некоторых обстоятельствах. Я просто дал полный ответ на вопрос «когда (при каких условиях?) Потоки открываются/закрываются?». – paxdiablo