これは、println
名前空間のout
クラスの静的System
関数ですか?
namespace System { class out { static println ... }
この名前をどのように解釈できますか?そして、この関数はJREのどこで定義されていますか? Java.lang.System
/Java.lang.Object
?
いいえ。実際、out
はSystem
クラスの静的メンバー(.NETとは異なります)であり、PrintStream
のインスタンスです。 println
は、PrintStream
クラスの通常の(オーバーロードされた)メソッドです。
http://download.Oracle.com/javase/6/docs/api/Java/lang/System.html#out を参照してください。
実際、out
/err
/in
がクラスである場合、大文字(Out
/Err
/In
)で名前が付けられます。 命名規則 (文法を無視)へ。
System
は、パブリック静的フィールドout
を持つクラスです。だからもっと
class System
{
public static PrintStream out;
}
class PrintStream
{
public void println ...
}
PrintStream
クラスは実際にはJava.io
パッケージに含まれているため、これは少し単純化しすぎていますが、物の関係を示すには十分です。
次のリンクを確認してください:
http://download.Oracle.com/javase/1.5.0/docs/api/Java/lang/System.html
次のことがはっきりとわかります。
System
は、Java.lang
パッケージのclassです。
out
は、System
クラスのstaticメンバーであり、Java.io.PrintStream
のインスタンスです。
println
は、Java.io.PrintStream
のmethodです。このメソッドは、出力先(通常はコンソールまたはファイル)にメッセージを出力するためにオーバーロードされます。
System.out.println()
高レベルの理解
これを理解するには、Javaのいくつかの基本を思い出す必要があります。
これで、Javaの基本的な知識が得られました。
詳細を取得します:
出力変数:静的またはインスタンス?
クラス名を使用して呼び出されるため、Systemクラスの静的変数がわかります。
ただし、メソッドprintln()メソッドを呼び出すため、「out」は参照タイプPrintStreamのオブジェクトです。
systemクラスはJava.langパッケージに属します
class System {
public static final PrintStream out;
//...
}
prinstreamクラスはJava.ioパッケージに属します
class PrintStream{
public void println();
//...
}
println
とprint
は、 PrintStream
クラスに属する2つのオーバーロードメソッドです。
それらにアクセスするには、このクラスのインスタンスが必要です。
タイプout
のPrintStream
と呼ばれるstaticプロパティが System
クラスで作成されます。
したがって、上記のメソッドにアクセスするには、次のステートメントを使用します。
System.out.println("foo");
System.out.print("foo");
System.out.println("Hello World");
System
:標準をカプセル化するオブジェクトを含む標準クラスの名前 I/O システムのデバイス。に含まれています パッケージ Java.lang
。 Java.lang
パッケージはデフォルトですべてのJavaプログラムにインポートされるため、 Java.lang
パッケージ Java APIでインポート宣言を必要としない唯一のパッケージです。
out
:オブジェクトoutは出力ストリーム(コマンドウィンドウ)を表し、クラスの静的データメンバーです。 System
。ここに注意してください System.out
(System
-Class&out
--静的オブジェクト。つまり、単にクラス名で参照されるため、オブジェクトを作成する必要はありません)。
println
:println()
は 方法 テキスト文字列を引数として取り、それを標準出力に表示するout
オブジェクトの モニター画面上。注意System
-クラスout
-staticオブジェクトprintln()
-メソッド
関数(Java関数ではメソッドと呼ばれる)は常に次の形式を持っていることを忘れないでください 関数()
•System
はJava.lang
パッケージのクラスです
•out
は、Java.io
パッケージのstatic
クラスのPrintStream
オブジェクトです
•println()
は、PrintStream
クラスのメソッドです
System
はJava.lang
パッケージのクラス、out
はPrintStream
クラスのオブジェクトであり、static
クラスのオブジェクト、System
クラス、print()
およびprintln()
は、PrintStream
クラスのインスタンスメソッドです。コンソールにソフト出力を提供します。
System
はJava.lang package
のクラスです。 out
はPrintStream
オブジェクトです。素敵な説明@ http://lazy-geeks.blogspot.in/2015/01/what-is-systemoutprintln.html
System.out.println();
System
はクラスです
out
はSystem
クラスの変数であり、static
であり、変数タイプは PrintStream
です。
out
クラスのSystem
変数は次のとおりです。
public final static PrintStream out = null;
System
here の実装を確認できます。
println()
は、PrintStream
クラスのオーバーロードメソッドです。
PrintStream
には、次の3つのオーバーロードされた印刷メソッドが含まれます。
print()
println()
printf()
ここでPrintStream
の実装 を見ることができます。
System
クラスをインスタンス化することはできません。Object
の子クラスであり、Object
は、定義したクラスを含むすべてのクラスの親(スーパークラス)です。
Oracleのドキュメントには次のようなものがあります。
public final class System extends Object
System
クラスには、いくつかの便利なクラスフィールドとメソッドが含まれています。インスタンス化することはできません。
System
クラスによって提供される機能には、標準入力、標準出力、およびエラー出力ストリームがあります。外部で定義されたプロパティと環境変数へのアクセス。ファイルとライブラリをロードする手段。アレイの一部をすばやくコピーするためのユーティリティメソッド。以来:JDK1.0
わからない場合は、 インスタンス化の意味、この質問を読んでください 。 C#の質問ですが、概念は同じです。
わからない場合 オーバーロードの意味はこの質問を読んでください 。
Outはクラス(オブジェクト)のインスタンスではなく、System
クラス名で呼び出されるため、out
はクラスSystem
に属する静的変数でなければなりません。 out
は、メソッドprintln()
を呼び出しているため、クラスのインスタンスでなければなりません。
// the System class belongs to Java.lang package
class System {
public static final PrintStream out;
}
class PrintStream {
public void println();
}
質問を理解するのは非常に簡単ですが、答えるには、Javaネイティブコードをさらに掘り下げる必要があります。
System
は静的クラスであり、インスタンス化できませんout
は、System
で定義された参照変数です。println()
は、標準出力に印刷するために使用される方法です。簡単でわかりやすい説明 は、この1行の文自体から多くを学ぶことができるので、これについてはいつでも歓迎です!
System
:はJava.lang
パッケージの定義済みクラスです。
out
:はstatic
クラスのprintStream
メンバーであり、そのコンソールとの接続です。
Println
:はprintstream
クラスのメソッドであり、static
ではありません。
System
はJava.lang
パッケージのクラスです。
out
は、System
クラスの静的データメンバーであり、PrintStream
クラスの参照変数です。
Println()
は、PrintStream
クラスの通常の(オーバーロードされた)メソッドです。
System
に関するjavadocから、ドキュメントの内容は次のとおりです。
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
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.
Println()について
class PrintStream{
public void println();
}
単純なスタンドアロンJavaアプリケーションの場合、出力データの行を書き込む一般的な方法は次のとおりです。
System.out.println(data);
JavaコードのSystem.out.println( "...")はJVMに変換されます。 JVMを調べると、内部で何が起こっているのかをよりよく理解できました。
本から Java仮想マシンからのプログラミング 。このコードは https://github.com/ymasory/programming-for-the-jvm/blob/master/examples/HelloWorld.j からコピーされます。
これはJVMソースコードです。
.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
「JVMはメモリへのバイトレベルのアクセスを許可しない」ため、タイプLJava/io/PrintSteram
のout
オブジェクト。 getstatic
JVMコマンドを使用してスタックに保存されます。次に、println
という名前のインスタンスからJava/io/PrintStream
クラスのメソッドout
を呼び出す前に、引数がスタックにプッシュされます。メソッドのパラメーターは(LJava/lang/String
;)で、出力タイプはvoid(V)です。
System.out.println
System
は、Java.lang
パッケージのクラスです。
out
はstatic
クラスのSystem
データメンバーであり、PrintStream
クラスの変数を参照します。
システムはJavaクラスです。
outは、インスタンスであり、PrintStreamの静的メンバーでもあります。
printlnは、PrintStreamのメソッドです。
System
-本質的にfinal
であるクラス。 public final class System{}
。 Java.lang
パッケージに属する
out
-static
型の参照変数PrintStream
println()
-static
クラスのPrintStream
以外のメソッド。 PrintStream
はJava.io
パッケージに属します。
それをよりよく理解するために訪問することができます: How System.out.println()Works In Java