Как работает System.in? - PullRequest
       18

Как работает System.in?

0 голосов
/ 01 октября 2018

У меня возникли сомнения, где в классе System есть статическое поле in типа InputStream.InputStream - это абстрактный класс.Документ Java гласит: System.in stream is already open and ready to supply input data.

Абстрактный класс не может быть инициализирован, пока не будет реализован.Но входной поток был реализован различными классами, такими как AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream и т. Д. Итак, когда мы используем System.in, объект какого класса создается?Или если нет Создает ли он какой-либо анонимный класс?

Пожалуйста, поделитесь своими взглядами ..!

1 Ответ

0 голосов
/ 01 октября 2018

Класс объекта, который связан с System.in, является подклассом InputStream.Больше ничего не указано 1 .

Но мы можем проверить это:

$ cat Test.java
public class Test {
  public static void main(String[] args) {
    System.out.println(System.in.getClass());
  }
}
$ javac Test.java 
$ java Test 
class java.io.BufferedInputStream
$ 

Конечно, это может варьироваться от одной версии Java к другой.Выше приведено для Java 8.


1 - Поскольку класс, используемый для System.in, не указан, не рекомендуется писать код, который зависит от эмпирического наблюдения кажется, что всегда используется один и тот же класс.Однако я не ожидал бы, что люди, которые предоставляют реализации Java, изменят эту деталь ... из-за вероятности, что люди могут иметь встроенное знание класса в своем коде.

...