49

次のようなコードを見てきました。

out.println("print something");

私は試したimport java.lang.System;

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

4

9 に答える 9

98

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

import static java.lang.System.out;

または、代わりにすべての静的メソッドとフィールドをインポートします

import static java.lang.System.*;

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

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

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

于 2010-03-23T22:37:15.970 に答える
28
PrintStream out = System.out;
out.println( "hello" );
于 2010-03-23T22:34:47.047 に答える
17

@sfusseneggerの答えは、これを機能させる方法を説明しています。しかし、私はそれをしないでください

経験豊富な Java プログラマーが使用し、使用することを期待しています。

        System.out.println(...);

ではない

        out.println(...);

System.out または System.err の静的インポートは (IMO) 悪いスタイルです。

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

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

(明らかに、Java プログラムが、現在のタスクを完了したときに破棄するつもりの 1 回限りのものである場合、保守性は問題ではありません。しかし、反対に、「破棄する」コードは破棄されないことがよくあります。 .)

于 2010-03-23T23:26:10.433 に答える
6

まあ、あなたは通常使用するでしょう

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 で常に使用しています。

于 2010-03-23T22:38:57.433 に答える
3

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

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

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

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

于 2013-01-30T17:24:14.860 に答える
2

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

    // write to stdout
    out = System.out;
    out.println("Test 1");
    out.close();
于 2010-03-23T22:35:50.380 に答える
1

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

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

out.println("hello");
于 2012-08-27T13:58:56.140 に答える
0

または単に:

System.out.println("Some text");
于 2010-03-23T22:38:59.957 に答える