2013-08-18 3 views
1

В java, java.lang.System класс, который имеет в статической переменной.
Заявленный как: общественности статической окончательного InputStream в
Это означает, что в является InputStream varibale.
Однако я вижу пример, используя System.in.read() для чтения ввода.Почему Java System.in.read() может вызывать не статический метод



Как это можно сделать, метод read() в InputStream не статический метод, как это может быть directlly это назвать? Насколько я понимаю, только статический метод может вызывать непосредственно класс без создания экземпляра.


чтения() declartion: public abstract int read() throws IOException


Спасибо Jon тарелочкам за ответы, я до сих пор какой-то момент не понимаю.

Если я вызываю System.in.read(), что означает, что я вызываю метод класса InputStream read()?

java.lang.System.in -----> java.io.InputStream ----> read() 
  1. вызова java.lang.System.in (который является статической переменной), в это java.io.InputStream переменная
  2. Вызывающий акт как вызов класса PrintStream.
  3. Процесс работает как вызов: PrintStream.read()
  4. Однако у меня есть трудности с пониманием метода read(), который не является статическим методом, поскольку он не должен быть вызван напрямую.
  5. Следует назвать как:

    PrintStream й = новый PrintStream(); int c = rd.read();

as read() должен быть вызван экземпляром. чтения() declartion: общественный абстрактный ИНТ чтения() бросает 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

ответ

7

Как это можно сделать, метод чтения() в InputStream не статический метод, как это может быть directlly это назвать?

Вы называете это на Экземпляр InputStream, через статический in переменной.Так что это:

int c = System.in.read(); 

эквивалентно:

InputStream stream = System.in; 
int c = stream.read(); 

ли это поможет сделать его более ясным?

+0

Спасибо, Джон Скит за ответ, я до сих пор не понимаю смысла. – loadload

+0

@loadload: Ну, не указав, что это за точка, я не думаю, что я (или кто-то еще) может вам помочь. –

+0

Если я вызываю System.in.read(), что означает, что я вызываю метод класса InputStream read()? java.lang.System.in -----> java.io.InputStream ----> read() 1.calling java.lang.System.in (который является статической переменной), in - java .io.InputStream variable 2. Вызывающий акт, как вызов класса PrintStream. 3. Процесс работает как вызов: PrintStream.read() 4.когда мне трудно понять метод read(), который не является статическим методом, так как его не следует вызывать напрямую. – loadload