java中在System類中in字段被聲明為InputStream類的實例化對象,但是InputStream類為抽象類
應該是無法別實例化的,為什麼在System類中被實例化了呢?
在System類中是這樣定義in的。
public final static InputStream in = nullInputStream();
nullInputStream是這樣實現的:
private static InputStream nullInputStream() throws NullPointerException {
if (currentTimeMillis() > 0)
return null;
throw new NullPointerException();
}
他不是返回null,就是拋出異常,如何初始化in呢?又如何去調用一個抽象方法read()呢?這是個
有趣的問題.不過寫java.io相關的應用其實不需要去關心這個問題的.
但我想還是解釋一下我對這個out,in的初始化的理解好了
我也看了一下java.lang.System的源代碼.
System類裡有大量的native方法,是調用本地代碼的,這些代碼很可能是由虛擬機來調用的.