Befindet sich diese statische println
-Funktion in der out
-Klasse aus dem System
-Namensraum?
Namespace System { klassifizieren { statische Drucke ... }
Wie kann ich diesen Namen interpretieren? Und wo in JRE ist diese Funktion definiert? Im Java.lang.System
/Java.lang.Object
?
Nein. Tatsächlich ist out
ein statisches Element in der Klasse System
(nicht wie in .NET) und eine Instanz von PrintStream
. Und println
ist eine normale (überladene) Methode der Klasse PrintStream
.
Siehe http://download.Oracle.com/javase/6/docs/api/Java/lang/System.html#out .
Wenn out
/err
/in
Klassen wären, würden sie mit Großbuchstaben (Out
/Err
/In
) aufgrund der Namenskonvention (Grammatik ignorieren).
System
ist eine Klasse mit einem öffentlichen statischen Feld out
. Also ist es eher so
class System
{
public static PrintStream out;
}
class PrintStream
{
public void println ...
}
Dies ist eine leichte Vereinfachung, da die Klasse PrintStream
tatsächlich im Paket Java.io
Enthalten ist, aber es ist gut genug, um die Beziehung von Dingen zu zeigen.
Überprüfen Sie folgenden Link:
http://download.Oracle.com/javase/1.5.0/docs/api/Java/lang/System.html
Sie werden deutlich sehen, dass:
System
ist eine Klasse in der Java.lang
Paket.
out
ist ein statisches Element der Klasse System
und eine Instanz von Java.io.PrintStream
.
println
ist eine Methode von Java.io.PrintStream
. Diese Methode ist überladen, um eine Nachricht an das Ausgabeziel zu drucken, bei dem es sich normalerweise um eine Konsole oder eine Datei handelt.
System.out.println ()
Hochrangiges Verständnis
Um dies zu verstehen, müssen wir uns an einige Grundlagen von Java erinnern:
Jetzt mit Grundkenntnissen von Java wissen wir:
Näheres dazu:
out variable: statisch oder instanz?
wird mit dem Klassennamen aufgerufen, daher kennen wir die statische Variable der Systemklasse.
der Aufruf einer println () -Methode ist jedoch ein Objekt des Referenztyps PrintStream.
die System-Klasse gehört zum Java.lang-Paket
class System {
public static final PrintStream out;
//...
}
die Prinstream-Klasse gehört zum Java.io-Paket
class PrintStream{
public void println();
//...
}
println
und print
sind die beiden überladenen Methoden, die zur Klasse PrintStream
gehören.
Um darauf zugreifen zu können, benötigen wir eine Instanz dieser Klasse.
Eine statische Eigenschaft mit dem Namen out
vom Typ PrintStream
wird am System
erstellt. Klasse.
Um auf die obigen Methoden zuzugreifen, verwenden wir daher die folgenden Anweisungen:
System.out.println("foo");
System.out.print("foo");
System.out.println("Hello World");
System
: Dies ist der Name der Standardklasse, die Objekte enthält, die den Standard kapseln I/O Geräte Ihres Systems.Es ist in der. Enthalten paket Java.lang
. Da das Java.lang
- Paket daher standardmäßig in jedes Java) - Programm importiert wird Paket Java.lang
ist das einzige Paket in der Java API, für das keine Importdeklaration erforderlich ist.
out
:Das Objekt out repräsentiert den Ausgabestream (d. H. Das Befehlsfenster) und ist das statische Datenelement der Klasse System
.Also hier notieren System.out
(System
-Class & out
- statisches Objekt, dh warum es einfach mit Klassennamen bezeichnet wird und wir kein Objekt erstellen müssen ).
println
:Die println()
ist methode of out
-Objekt, das die Textzeichenfolge als Argument verwendet und der Standardausgabe anzeigt, d. h auf dem Bildschirm.HinweisSystem
-Klasseout
-statisches Objektprintln()
-Methode
Denken Sie daran, dass eine Funktion (in Java Funktion heißt Methode) immer das Format hat funktion()
• System
ist eine Klasse im Paket Java.lang
• out
ist ein static
Objekt der Klasse PrintStream
im Paket Java.io
• println()
ist eine Methode in der Klasse PrintStream
System
ist eine Klasse des Pakets Java.lang
, out
ist ein Objekt der Klasse PrintStream
und auch ein Datenelement static
von System
class, print()
und println()
ist eine Instanzmethode der Klasse PrintStream
. Es ist eine weiche Ausgabe auf der Konsole.
System
ist eine Klasse in Java.lang package
. Und out
ist ein PrintStream
Objekt. Nette Erklärung @ http://lazy-geeks.blogspot.in/2015/01/what-is-systemoutprintln.html
System.out.println();
System
ist die Klasse
out
ist eine Variable in der Klasse System
und es ist ein static
und Variablentyp ist PrintStream
.
Hier ist die Variable out
in der Klasse System
:
public final static PrintStream out = null;
Sie können die Implementierung von System
hier sehen.
println()
ist eine überladene Methode in der Klasse PrintStream
.
PrintStream
enthält drei überladene Druckmethoden:
print()
println()
printf()
Sie können Implementierung von PrintStream
hier sehen .
Sie können die Klasse System
nicht instanziieren und sie ist die untergeordnete Klasse von Object
und die Object
ist der Vater (die Oberklasse) aller Klassen, einschließlich der von Ihnen definierten Klassen.
In den Oracle-Dokumenten heißt es:
public final class System extends Object
Die Klasse
System
enthält mehrere nützliche Klassenfelder und Methoden. Es kann nicht instanziiert werden.Zu den von der Klasse
System
bereitgestellten Funktionen gehören Standardeingabe-, Standardausgabe- und Fehlerausgabestreams. Zugriff auf extern definierte Eigenschaften und Umgebungsvariablen; ein Mittel zum Laden von Dateien und Bibliotheken; und ein Hilfsprogramm zum schnellen Kopieren eines Teils eines Arrays.Seit: JDK1.0
Wenn Sie nicht wissen was mit instanziieren gemeint ist, lesen Sie diesen Fragebogen . Es ist eine C # -Frage, aber das Konzept ist dasselbe.
Auch Was ist der Unterschied zwischen einer Instanz und einem Objekt?
Wenn Sie nicht wissen was mit Überlastung gemeint ist, lesen Sie diese Frage .
Da out mit dem Klassennamen System
aufgerufen wird und nicht mit einer Instanz einer Klasse (eines Objekts), muss out
eine statische Variable sein, die zur Klasse System
gehört. . out
muss eine Instanz einer Klasse sein, da sie die Methode println()
aufruft.
// the System class belongs to Java.lang package
class System {
public static final PrintStream out;
}
class PrintStream {
public void println();
}
Es ist recht einfach, die Frage zu verstehen, aber um sie zu beantworten, müssen wir uns eingehender mit dem nativen Code Java befassen.
System
ist eine statische Klasse und kann nicht instanziiert werdenout
ist eine Referenzvariable, die in System
definiert ist.println()
ist die Methode zum Drucken auf der Standardausgabe.Ein kurze und nette Erklärung ist immer willkommen, da wir aus dieser einzigen Aussage viel lernen können!
System
: ist eine vordefinierte Klasse von Java.lang
Paket.
out
: ist ein static
Mitglied der printStream
Klasse und verbindet sich mit der Konsole.
Println
: ist eine Methode der Klasse printstream
und keine static
.
System
ist eine Klasse im Paket Java.lang
.
out
ist das statische Datenelement in der Klasse System
und der Referenzvariablen der Klasse PrintStream
.
Println()
ist eine normale (überladene) Methode der Klasse PrintStream
.
Aus dem Javadoc über System
, hier ist, was der Doc sagt:
public final class System
extends Object
The System class contains several useful class fields and methods. It cannot be instantiated.
Among the facilities provided by the System class are standard input, standard output, and error output streams; access to externally defined properties and environment variables; a means of loading files and libraries; and a utility method for quickly copying a portion of an array.
Since:
JDK1.0
Bezüglich System.out
public static final PrintStream out
The "standard" output stream class Prinstream belongs to Java.io package. This stream is already open and ready to accept output data.
When the JVM is initialized, the method initializeSystemClass() is called that does exactly what it’s name says – it initializes the System class and sets the out variable. The initializeSystemClass() method actually calls another method to set the out variable – this method is called setOut().
Typically this stream corresponds to display output or another output destination specified by the Host environment or user.
In Bezug auf println ();
class PrintStream{
public void println();
}
Für einfache eigenständige Java) Anwendungen ist eine typische Methode zum Schreiben einer Zeile mit Ausgabedaten:
System.out.println(data);
System.out.println ("...") in Java Code wird in JVM übersetzt. Durch einen Blick in die JVM konnte ich besser verstehen, was sich hinter der Motorhaube abspielt.
Aus dem Buch Programmieren von der Java Virtual Machine . Dieser Code wird kopiert von https://github.com/ymasory/programming-for-the -jvm/blob/master/examples/HelloWorld.j .
Dies ist der JVM-Quellcode.
.class public HelloWorld
.super Java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit stack 2
.limit locals 1
getstatic Java/lang/System/out Ljava/io/PrintStream;
ldc "Hello, world"
invokevirtual Java/io/PrintStream/println
(Ljava/lang/String;)V
return
.end method
.end class
Da "Die JVM keinen Zugriff auf den Speicher auf Byte-Ebene zulässt" das Objekt out
vom Typ L Java/io/PrintSteram
; wird mit dem Befehl getstatic
JVM in einem Stapel gespeichert. Anschließend wird das Argument auf den Stapel verschoben, bevor eine Methode println
der Klasse Java/io/PrintStream
Aus einer Instanz mit dem Namen out
aufgerufen wird. Der Parameter der Methode ist (L Java/lang/String
;) Und der Ausgabetyp ist ungültig (V).
System.out.println
System
ist eine Klasse in der Java.lang
Paket.
out
ist ein static
Datenelement der System
Klasse und verweist auf eine Variable der PrintStream
Klasse.
System ist die Java Klasse.
out ist die Instanz und auch statisches Mitglied von PrintStream.
println ist die Methode von PrintStream.
System
- Klasse, die ihrem Wesen nach final
ist. public final class System{}
. Gehört zum Paket Java.lang
out
- static
Referenzvariable vom Typ PrintStream
println()
- Nicht static
Methode in PrintStream
Klasse. PrintStream
gehört zum Paket Java.io
.
Um es besser zu verstehen, besuchen Sie: Funktionsweise von System.out.println () in Java