次のようなコードを見てきました。
out.println("print something");
私は試したimport java.lang.System;
しかし、それは機能していません。どのように使用しますout.println()
か?
静的インポートはトリックを行います:
import static java.lang.System.out;
または、代わりにすべての静的メソッドとフィールドをインポートします
import static java.lang.System.*;
@Steve Cによる補遺:@sfusseneggerが私の回答のコメントでこれを言ったことに注意してください。
「このような System.out の静的インポートの使用は、単純な 1 回限りのコード以外には適していません。」
ですから、彼 (または私) がこの解決策がグッド プラクティスであると考えているとは思わないでください。
PrintStream out = System.out;
out.println( "hello" );
@sfusseneggerの答えは、これを機能させる方法を説明しています。しかし、私はそれをしないでください!
経験豊富な Java プログラマーが使用し、使用することを期待しています。
System.out.println(...);
ではない
out.println(...);
System.out または System.err の静的インポートは (IMO) 悪いスタイルです。
System.out または System.err に大量の出力を行っている場合は、ストリームを属性、ローカル変数、またはメソッドに抽象化する方がよいと思います。これにより、アプリケーションまたはライブラリがより保守しやすくなり、再利用しやすくなります。
(明らかに、Java プログラムが、現在のタスクを完了したときに破棄するつもりの 1 回限りのものである場合、保守性は問題ではありません。しかし、反対に、「破棄する」コードは破棄されないことがよくあります。 .)
まあ、あなたは通常使用するでしょう
System.out.println("print something");
これはインポートを必要としません。ただし、 out はシステム内の静的フィールドであるため、次のように静的インポートを使用して記述できます。
import static java.lang.System.*;
class Test {
public static void main(String[] args) {
out.println("print something");
}
}
このリンクを見てください。通常、これは、特定のクラスの多くの静的メソッドを使用している場合にのみ行います。たとえば、junit アサートや easymock で常に使用しています。
out
クラスPrintStream
の静的変数(オブジェクト)の型であり、クラスの関数です。System
println()
PrintStream
class PrintStream
{
public void println(){} //member function
...
}
class System
{
public static final PrintStream out; //data member
...
}
そのため、静的変数 (オブジェクト)は、その型 (クラス) のメソッドをさらに呼び出すout
クラス名でアクセスされます。System
println()
PrintStream
最初にオブジェクトを作成する必要があります。これについての詳細はこちら:
// write to stdout
out = System.out;
out.println("Test 1");
out.close();
これはソケットでも見ることができます...
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println("hello");
または単に:
System.out.println("Some text");