Est-ce que cette fonction println
statique dans out
classe à partir de System
espace de noms?
namespace System { class out { printbln statique ... }
Comment puis-je interpréter ce nom? Et où dans JRE cette fonction est définie? Dans Java.lang.System
/Java.lang.Object
?
En fait, out
est un membre statique de la classe System
(contrairement à .NET), qui est une instance de PrintStream
. Et println
est une méthode normale (surchargée) de la classe PrintStream
.
Voir http://download.Oracle.com/javase/6/docs/api/Java/lang/System.html#out .
En fait, si out
/err
/in
étaient des classes, elles seraient nommées avec un caractère de majuscule (Out
/Err
/In
) en raison de convention de nommage (en ignorant la grammaire).
System
est une classe qui a un champ statique public out
. Donc ça ressemble plus à
class System
{
public static PrintStream out;
}
class PrintStream
{
public void println ...
}
Ceci est une légère simplification excessive, car la classe PrintStream
est en fait dans le Java.io
package, mais il est assez bon pour montrer la relation de choses.
Vérifiez le lien suivant:
http://download.Oracle.com/javase/1.5.0/docs/api/Java/lang/System.html
Vous verrez clairement que:
System
est une classe dans le Java.lang
paquet.
out
est un membre statique de la classe System
et constitue une instance de Java.io.PrintStream
.
println
est une méthode de Java.io.PrintStream
. Cette méthode est surchargée pour imprimer le message vers la destination de sortie, qui est généralement une console ou un fichier.
System.out.println ()
compréhension de haut nivea
Pour comprendre cela, nous devons rappeler quelques bases de Java:
Maintenant, avec la connaissance de base de Java nous savons:
Permet d'obtenir plus de détails:
variable out: statique ou instance?
appelé en utilisant le nom de la classe, nous connaissons donc sa variable statique de la classe System.
mais en appelant une méthode println (), la méthode so ‘out’ est un objet du type référence PrintStream.
la classe System appartient au package Java.lang
class System {
public static final PrintStream out;
//...
}
la classe Prinstream appartient au package Java.io
class PrintStream{
public void println();
//...
}
println
et print
sont les deux méthodes surchargées qui appartiennent à la classe PrintStream
.
Pour y accéder, nous avons besoin d'une instance de cette classe.
Une propriété statique appelée out
de type PrintStream
est créée sur le System
classe.
Par conséquent, pour accéder aux méthodes ci-dessus, nous utilisons les instructions suivantes:
System.out.println("foo");
System.out.print("foo");
System.out.println("Hello World");
System
: C'est le nom de la classe standard qui contient les objets qui encapsule la norme I/O appareils de votre système.Il est contenu dans le paquet Java.lang
. Comme le paquet Java.lang
Est importé dans chaque Java par défaut, Paquet Java.lang
est le seul package de Java qui ne nécessite pas de déclaration d'importation.
out
:L'objet out représente le flux de sortie (fenêtre i.e Command) et est le membre de données statique de la classe System
.Alors notez ici System.out
(System
-Class & out
- objet statique, c’est-à-dire pourquoi il est simplement désigné par nom de classe et nous n’avons pas besoin de créer d’objet ).
println
:La println()
est méthode de out
objet qui prend la chaîne de texte en argument et l’affiche sur la sortie standard i.e sur l'écran du moniteur.RemarqueSystem
-Classout
-static Objectprintln()
-méthode
Rappelez-vous une fonction (dans Java est appelée méthode) a toujours le format une fonction()
• System
est une classe du paquet Java.lang
• out
est un objet static
de PrintStream
class dans le package Java.io
• println()
est une méthode de la classe PrintStream
System
est une classe du paquet Java.lang
, out
est un objet de PrintStream
class et également static
membre de data de System
class, print()
et println()
est une méthode d'instance de PrintStream
class. il fournit une sortie logicielle sur console.
System
est une classe dans Java.lang package
. Et out
est un objet PrintStream
. Belle explication @ http://lazy-geeks.blogspot.in/2015/01/what-is-systemoutprintln.html
System.out.println();
System
est la classe
out
est une variable de la classe System
et il s'agit d'un static
et le type de variable est PrintStream
.
Voici la variable out
dans la classe System
:
public final static PrintStream out = null;
Vous pouvez voir l'implémentation de System
ici .
println()
est une méthode surchargée dans PrintStream
class.
PrintStream
inclut trois méthodes d'impression surchargées, à savoir:
print()
println()
printf()
Vous pouvez voir implémentation de PrintStream
ici .
Vous ne pouvez pas instancier la classe System
et il s'agit de la classe enfant de Object
et le Object
est le père (la superclasse) de toutes les classes, y compris les classes que vous avez définies.
Voici ce que dit la documentation Oracle:
public final class System extends Object
La classe
System
contient plusieurs champs et méthodes de classe utiles. Il ne peut pas être instancié.Parmi les fonctionnalités fournies par la classe
System
figurent les flux d'entrée standard, de sortie standard et de sortie d'erreur; accès aux propriétés et variables d'environnement définies en externe; un moyen de charger des fichiers et des bibliothèques; et une méthode utilitaire pour copier rapidement une partie d’un tableau.Depuis: JDK1.0
Si vous ne savez pas que signifie instancier, lisez cette question . C'est une question C # mais le concept est le même.
Aussi, Quelle est la différence entre une instance et un objet?
Si vous ne savez pas que signifie "surcharge", lisez cette question .
Comme out est appelé avec le nom de classe System
, et non comme une instance de classe (un objet), So out
doit donc être une variable statique appartenant à la classe System
. . out
doit être une instance d'une classe, car elle appelle la méthode println()
.
// the System class belongs to Java.lang package
class System {
public static final PrintStream out;
}
class PrintStream {
public void println();
}
Il est assez simple de comprendre la question, mais pour y répondre, nous devons creuser plus profondément dans Java).
System
est une classe statique et ne peut pas être instanciéout
est une variable de référence définie dans System
println()
est la méthode utilisée pour imprimer sur une sortie standard.Un explication brève et intéressante est toujours le bienvenu, car nous pouvons apprendre beaucoup de cette simple ligne de déclaration!
System
: est une classe prédéfinie de Java.lang
paquet.
out
: est un membre static
de la classe printStream
et se connecte à la console.
Println
: est une méthode de printstream
class et ce n'est pas un static
.
System
est une classe du paquet Java.lang
.
out
est le membre de données statique dans System
class et la variable de référence de PrintStream
class.
Println()
est une méthode normale (surchargée) de PrintStream
class.
Dans le javadoc à propos de System
, voici ce que dit la doc:
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
En ce qui concerne 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.
En ce qui concerne println ();
class PrintStream{
public void println();
}
Pour les applications simples Java autonomes), une méthode classique pour écrire une ligne de données en sortie est la suivante:
System.out.println(data);
System.out.println ("...") in Java est traduit en JVM. Explorer la JVM m'a permis de mieux comprendre ce qui se passe derrière le capot.
Extrait du livre Programmation de la Java machine virtuelle . Ce code est copié de https://github.com/ymasory/programming-for-the -jvm/blob/master/examples/HelloWorld.j .
C'est le code source de la machine virtuelle Java.
.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
En tant que "La machine virtuelle Java n'autorise pas l'accès à la mémoire au niveau octet", l'objet out
de type LJava/io/PrintSteram
; est stocké dans une pile avec la commande getstatic
JVM. Ensuite, l’argument est placé sur la pile avant d’appeler une méthode println
de la Java/io/PrintStream
classe d'une instance nommée out
. Le paramètre de la méthode est (LJava/lang/String
;) et le type de sortie est vide (V).
System.out.println
System
est une classe dans le Java.lang
paquet.
out
est un membre de données static
de la classe System
et référence une variable de la classe PrintStream
.
System est la classe Java.
out est l'instance et le membre statique de PrintStream.
println est la méthode de PrintStream.
System
- classe qui est final
dans la nature. public final class System{}
. Appartient au paquet Java.lang
out
- static
variable de référence de type PrintStream
println()
- non static
méthode dans PrintStream
classe. PrintStream
appartient au paquet Java.io
.
Pour mieux comprendre, vous pouvez visiter: Comment System.out.println () fonctionne en Java