2016-07-22 4 views
0

Метод read() объявлен абстрактным в классе InputStream. Но мы можем читать с клавиатуры, используя System.in.read().Что касается System.in по умолчанию?

Мой вопрос в том, что 'in' является ссылкой на класс InputStream. Поэтому для использования метода read() метод in должен ссылаться на некоторый подкласс InputStream.

К какому классу относится «in» по умолчанию? Можем ли мы написать код, чтобы найти ответ на этот вопрос?

+0

Это относится к ** стандартный ввод **. См. [Javadoc] (https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#in), который добавляет * Этот поток уже открыт и готов к отправке входных данных. Обычно этот поток соответствует вводу клавиатуры или другому источнику ввода, заданному средой хоста или пользователем. * –

ответ

3

Чтобы ответить на конкретный вопрос: Да, вы можете узнать класс System.in путем написания кода.

Это приложение, которое вы ищете:

public class SystemDotInClassFinder { 
    public static void main(String[] args) { 
     System.out.println(System.in.getClass().getName()); 
    } 
} 

Запуск этого сценария производит:

java.io.BufferedInputStream 
1

Как вы можете увидеть в исходном коде это BufferedInputStream:

private static void initializeSystemClass() { 
    props = new Properties(); 
    initProperties(props); 
    VM.saveAndRemoveProperties(props); 
    lineSeparator = props.getProperty("line.separator"); 
    Version.init(); 
    FileInputStream arg = new FileInputStream(FileDescriptor.in); 
    FileOutputStream arg0 = new FileOutputStream(FileDescriptor.out); 
    FileOutputStream arg1 = new FileOutputStream(FileDescriptor.err); 
    setIn0(new BufferedInputStream(arg)); 
    setOut0(newPrintStream(arg0, props.getProperty("sun.stdout.encoding"))); 
    setErr0(newPrintStream(arg1, props.getProperty("sun.stderr.encoding"))); 
    loadLibrary("zip"); 
    Terminator.setup(); 
    VM.initializeOSEnvironment(); 
    Thread arg2 = Thread.currentThread(); 
    arg2.getThreadGroup().add(arg2); 
    setJavaLangAccess(); 
    VM.booted(); 
} 
Смежные вопросы