1

これはコードです:

public class Main {
   public static void main(String[] args) {
        new Picture().edit();
    }
}

Picture の前に括弧があるのはなぜですか?

edit メソッドを持つ Picture クラスがありますが、picture クラスにも Picture メソッドがあります。

ここで何が起こっているのですか?

編集メソッドも呼び出しながら、picture メソッドを呼び出す Picture クラスが作成されていますか?

ありがとう

4

4 に答える 4

4

ここで行っているのはPicture、引数のない (おそらくデフォルトの) コンストラクターを介してインスタンスを作成することだけです。続いて、edit()作成したばかりのインスタンスでメソッドを呼び出します。インスタンスをどこにも保存していないためPicture、メソッド呼び出しが完了した直後にガベージ コレクションの対象となります。

すべての実用的な目的のために、コードを次のように書くことができます

Picture picture = new Picture();

picture.edit();

Picture メソッドはスニペットのどこにも含まれていないことに注意してください。コンストラクタメソッドには違いがあります。


Picture の前に括弧があるのはなぜですか?

これは、Java でのオブジェクト作成の単純な構文です。Pictureコンストラクターが何らかの引数を取る場合、それらのブラケットが確実に必要になることは明らかです。

new Picture(someArg)

しかし、引数が 0 のコンストラクターを持つ括弧が必要であるという事実は、純粋に言語設計上の決定です。私は Scala のような言語 (JVM 上でも動作する) を信じています。

于 2013-10-17T18:56:10.947 に答える
2

new Picture()コンストラクターを呼び出す新しい画像オブジェクトをインスタンス化しています。それ.edit();はすぐに呼び出すメソッドです。

は静的ではないためedit()、インスタンス化されたクラスから実行する必要があります。

タイピングと同じです

Picture pic = new Picture();
pic.edit();

唯一の違いは、毎回pic新しいオブジェクトをインスタンス化して構築する必要なく、後で再利用できることです。Picture

new Picture().edit();実行が完了するとガベージ コレクションが処理されるため、それを呼び出すことは、何かに対して 1 回限りの呼び出しを行う簡単な方法に適しています。

于 2013-10-17T18:56:22.027 に答える
2

Picture クラスのコンストラクターを呼び出してから、edit() 関数を呼び出しています。Picture という名前の関数がある場合、呼び出されることはありません。必要に応じて呼び出すことができます。

Picture pic = new Picture();
pic.edit(); // call edit function

Picture pic = new Picture();
pic.Picture(); // call picture function
于 2013-10-17T18:57:10.333 に答える
1

これはコンストラクタで、新しい Picture オブジェクトを作成します。コンストラクターへの引数がある場合、それらは括弧の中に入れられます。

new Picture()

ここでは、新しく作成された画像オブジェクトに対して edit メソッドを呼び出します。

new Picture().edit();

Picture オブジェクトは保存されないため、後で失われます。この 1 つのメソッド呼び出しだけを行いたい場合は、おそらく問題ありません。

于 2013-10-17T18:58:12.617 に答える