in-System.aus.println()
Erstens bedauert, wenn dies ist eine sehr grundlegende Frage, die ich nicht fördern, ich bin immer noch ein code monkey.
Ich wurde in einem interview gefragt, zu klären, System.aus.println();
Ich habe erklärt das auf folgende Weise
//this class belongs to java.lang package
class System{
public static PrintStream out;
}
//this class belongs to java.io package
class PrintStream{
public void println..
}
Ich erklärt habe, dass System.aus gültig ist, denn dies ist der Weg, den wir Zugriff auf statische Variablen in java und out ist ein PrintStream-Objekt, und somit können wir auf Ihre Methoden, die In der Summe als
System.out.pritnln();
er fragte mich, um zu simulieren eine ähnliche Art von Sendung,die ich verfolgt und es hat nicht funktioniert,da System.out ist null zurückgeben
meine Frage ist, wo ist die out-Objekt instanziiert, die in java ? Es ist ein vordefiniertes Objekt, wenn ich bin nicht falsch. was sollte die sorgfältige Erklärung dafür.
Technisch was sollen wir rufen? Draußen ist eine variable vom Typ PrintStream geben oder sollte man sagen, ein Objekt vom Typ PrintStream ?
Ich habe ein analoges Programm wie class A{ static B aus}; class B{ } habe ich versucht zu drucken-System.aus.println(A. out); die Rückgabe null.
InformationsquelleAutor srk | 2012-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
System.aus initialisiert wird
null
wenn die Klasse instanziiert wird. Dies wird durch dienullPrintStream()
Methode inSystem.java
, die nur die Renditennull
.Wenn die JVM initialisiert wurde, ruft es die
initializeSystemClass()
Methode. Diese Methode ruft dienative
MethodesetOut0()
setztout
variable auf den entsprechenden Wert.Das mag seltsam scheinen, aber es ist eine notwendige operation aus den folgenden Gründen:
out
nicht statisch festgelegt werden, um den Wert, weilSystem
werden muss, um einer der ersten geladenen Klassen (vorPrintStream
).out
mussfinal
so dass Ihr Wert nicht direkt überschrieben, die von einem Benutzer.out
kann nicht eingestellt werden, statisch und endgültig ist, müssen wir überschreiben die Semantik der Sprache mit einemnative
MethodesetOut0()
.Ich hoffe, das hilft deinem Verständnis.
InformationsquelleAutor Jivings
System.out
ist eine normale statische Attribut, es wurde von der JVM durch dieinitializeSystemClass()
- Methode bei JVM-Initialisierung. Sie können sogar ändern es (obwohl es nicht empfohlen wird) einfach durch AufrufSystem.setOut(printOutStream);
, woprintOutStream
ist der Strom, den Sie verwenden möchten als standard-Ausgabe.Hier ist eine schöne Artikel detailliert wie funktioniert System.aus.println() arbeiten.
out
wird von der JVM durch dieinitializeSystemClass()
Methode.danke, ich aktualisierte meine Antwort.
InformationsquelleAutor Óscar López
System.aus wird durch die JVM. Durch die Zeit, die der main-Methode aufgerufen wird, System.out ist offen und bereit für den Einsatz.
Sehen http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#out
InformationsquelleAutor Peter Cetinski
In der Oracle Java runtime-Bibliotheken, wird er instanziiert, die nativ mit der
registerNatives()
native-Methode, die aufgerufen wird (über einestatic
Initialisierung) auf das laden derSystem
Klasse. Dies ist jedoch eine Implementierung detail.Können Sie auch festlegen
System.out
direkt überSystem.setOut()
.registerNatives()
links native Methoden, um die JVM-interne Methoden, ich habe noch nie gesehen, es verwendet, um Variablen instanziieren.InformationsquelleAutor Mark Peters
In-System.aus.pritln ist ein statisches Feld (- Objekt) des PrintWriter in der System-Klasse und println ist eine Methode PrintWriter.
Referenz :
System : http://docs.oracle.com/javase/6/docs/api/java/lang/System.html
PrintWriter : http://docs.oracle.com/javase/6/docs/api/java/io/PrintWriter.html
InformationsquelleAutor Pinkesh Sharma
Gibt es keine Notwendigkeit zu gehen für das Netz und die Dokumentation auch. Wir können einfach sagen javap-java.lang.System dies gibt Ihnen eine Liste aller statischer Felder, Methode, Prototypen, gehören zum System der Klasse.
Wir können die details jeder java-Klasse mit javap, vorausgesetzt, Sie wissen, Ihre Paket-und Klassennamen
out public static PrintStream-Objekt, definiert in der System-Klasse.
InformationsquelleAutor user3282701
Wenn die Klasse sich initialisiert, er fordert seine
initializeSystemClass()
Methode, hier ist der code:In diesem code
setOut0()
ist eine systemeigene Funktion, implementiert in System.c:Dies ist ein standard-JNI code-sets-System.aus dem argument an, diese Methode ruft die native Methode setOut0() setzt die out-variable auf den entsprechenden Wert.
System.out
endgültig ist, bedeutet es, es kann nicht festgelegt werden, um etwas anderes in initializeSystemClass (), sondern mit nativem code ist es möglich, zu ändern, eine final variable.InformationsquelleAutor Mohit Tyagi
System.aus.println();
hier println ist ein Objekt der printstream-Klasse.Wir können nicht direkt erstellen-Objekt für die printstream-Klasse. Out ist ein Objekt der system-Klasse. wird als Feld in der system-Klasse. beim aufrufen von system.es indirekt schafft-Objekt für die printstream-Klasse. daher können wir nennen println () - Methode mit System.aus.prontln().
Surendar, println() ist kein Objekt, sondern eine Methode, die PrintStream-Klasse.
Sie können direkt ein Objekt erstellen, für die PrintStream-Klasse. Zum Beispiel, docs.oracle.com/javase/1.5.0/docs/api/java/io/... .
"aus" ist nicht speziell ein Objekt des Systems, aber es ist ein Feld von System, wie Sie sagen. Nicht "sogenannte", sondern es "ist", als Objekte, die nicht einfach "haben" Objekte in Java, es ist strukturierter als das.
Beim aufrufen von System.aus der PrintStream-Objekt wird nicht erzeugt, indirekt; es existiert tatsächlich, wenn die JVM gestartet und die Referenz zugewiesen wurde System.aus. (wie bereits in einigen anderen posts oben)
InformationsquelleAutor surendar