web-dev-qa-db-ja.com

Java out.println()これはどのように可能ですか?

私は次のようなコードを見てきました:

out.println("print something");

import Java.lang.System;を試しました

しかし、それは機能していません。 out.println()はどのように使用しますか?

45
user69514

静的インポートはトリックを行います:

import static Java.lang.System.out;

または、次を使用してすべての静的メソッドとフィールドをインポートします

import static Java.lang.System.*;

@Steve Cによる補遺:@sfusseneggerが私の回答のコメントでこれを言ったことに注意してください。

"System.outのこのような静的インポートの使用は、単純な1回限りのコード以上には適していません。"

だから、彼(または私)がこの解決策がグッドプラクティスであると考えていると想像しないでください。

86
sfussenegger
PrintStream out = System.out;
out.println( "hello" );
26
tangens

@sfusseneggerの答えは、この作業を行う方法を説明しています。しかし、私は言うそれをしないでください

経験豊富なJavaプログラマーが使用しており、

        System.out.println(...);

ではなく

        out.println(...);

System.outまたはSystem.errの静的インポートは(IMO)不適切なスタイルです:

  • 受け入れられているイディオムを破り、
  • テスト中に追加され、削除されていない不要なトレースプリントを追跡することが難しくなります。

System.outまたはSystem.errに大量の出力を行っていることに気付いた場合、ストリームを属性、ローカル変数、またはメソッドに抽象化する方が良いと思います。これにより、アプリケーションがより再利用可能になります。

16
Stephen C

まあ、あなたは通常使用します

System.out.println("print something");

インポートは不要です。ただし、outはSystem内の静的フィールドであるため、次のような静的インポートを使用して記述できます。

import static Java.lang.System.*;

class Test {
    public static void main(String[] args) {
        out.println("print something");
    }
}

これを見てください link 。通常、これは、特定のクラスの静的メソッドを多数使用している場合にのみ実行します。たとえば、私はjunitアサートとeasymockで常に使用しています。

6
Casey

outPrintStreamクラスの静的変数(オブジェクト)のSystem型であり、println()PrintStreamクラスの関数です。

class PrintStream
{
    public void println(){}    //member function
    ...
}

class System
{
    public static final PrintStream out;   //data member
    ...
}

そのため、静的変数(オブジェクト)outがクラス名Systemでアクセスされ、さらにPrintStream型(クラス)のメソッドprintln()が呼び出されます。

3
Dushyant Thakur

単にインポート:

import static Java.lang.System.*;
1
user2844259

あなたはソケットでもこれを見ることができます...

PrintWriter out = new PrintWriter(socket.getOutputStream());

out.println("hello");
1
Exorcismus

最初にオブジェクトoutを作成する必要があります。詳細はこちら:

    // write to stdout
    out = System.out;
    out.println("Test 1");
    out.close();
1
Oskar Kjellin

または単に:

System.out.println("Some text");
0
Chris Knight