В java класс java.lang.System
, который имеет статическую переменную in.
Объявлено как: public static final InputStream in
Это означает, что in является переменной InputStream.
Однако я вижу пример использования System.in.read()
для чтения ввода.
Как это сделать, метод read()
в InputStream не является статическим методом, как его можно вызвать напрямую? Насколько я понимаю, только статический метод может вызываться непосредственно классом без создания экземпляра.
объявление read(): public abstract int read() throws IOException
Спасибо Jon Skeet за ответ, я все еще кое-что не понимаю.
Если я вызываю System.in.read()
, что означает, что я вызываю метод класса InputStream read()
?
java.lang.System.in -----> java.io.InputStream ----> read()
- вызов
java.lang.System.in
(который является статической переменной), это переменнаяjava.io.InputStream
- Вызов действует как вызов класса PrintStream.
- Процесс работает как вызов:
PrintStream.read()
- однако мне трудно понять метод read(), который не является статическим методом, так как его не следует вызывать напрямую.
Это должно быть вызвано как:
PrintStream rd = новый PrintStream(); int c = rd.read();
поскольку read() должен вызываться экземпляром. Объявление read(): public abstract int read() выдает исключение IOException
PS: пробую этот код не работает:
InputStream rd = new InputStream();
int c = rd.read();
System.out.println(c);
Но не знаю почему.
ссылка: http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html