2012-05-27 27 views

cevap

8

kaynak kodu şu yorumu vardır System.in ile diğer sınıflardaki null referansları (inlining anlamı). Açıkçası her şeyi işlevsel olmayan yapardı. Sistem başlatıldıktan sonra bu System.in son değerinin (normalde asla değişmemesi gereken) değerini değiştirmek için bazı yerel kodlar kullanılmalıdır.

Devam etmek için: Bu çok özel durumda yapılmaması gereken bir derleyici optimizasyonundan kaçınmak için kullanılır, çünkü System.in normalde imkansız olan değişebilen son bir alandır.

+0

+1 Bu doğru cevap. –

+0

haklısınız, "public static void setIn (InputStream in)" var ve özel statik yerel geçersiz setIn0 (InputStream girişi); ' – Pshemo

+0

setIno (InputStream in) ve setOut'un (PrintStream çıkışı) amacı nedir? – user1357722

-1

Hatalısınız.

Java kaynak kodunda

public final static InputStream in = nullInputStream(); 

Sen System sınıfa here için kaynak kodunun referans alabilir değil

public final static InputStream in = null; 

olarak yazılır. o null olarak ayarlandı, derleyici sabit olarak ele alacak System.in statik nihai değişken, olduğundan Kısacası

/** 
* The following two methods exist because in, out, and err must be 
* initialized to null. The compiler, however, cannot be permitted to 
* inline access to them, since they are later set to more sensible values 
* by initializeSystemClass(). 
*/ 

ve tüm yerini alacak:

+0

Lütfen aşağıdaki listeden bir not alın Genel sistem sınıfı { /* İlk şey --- yerlileri kaydet */ private static native void registerNatives(); statik { registerNatives(); } /** Bu sınıfın herhangi birinin başlatılmasına izin verme */ özel Sistem() { } /** * "Standart" giriş akışı. Bu akış zaten * açık ve giriş verisi için hazır. Tipik olarak bu akış *, klavye girişine veya * ile belirtilen ana giriş kaynağına veya kullanıcıya karşılık gelir. */ genel son statik InputStream in = nullInputStream(); – user1357722

+0

Kaynak referansı nereden aldınız? –

+0

Yanlış referans aldınız. –

İlgili konular