1

Java の OOP の概念は初めてです。この二つの事件の違いは何ですか?

1.

ClassName obj_name = new ClassName();
obj_name.method();

2.

new ClassName().method();

良い説明は大歓迎です。ありがとう

4

4 に答える 4

0
  • オプション 1では、 newキーワードの後に​​コンストラクターが続くオブジェクトを作成し、そのオブジェクトはclass_name obj_name変数によって参照されるため、obj_name はそのオブジェクトを指しています。
  • オプション 2では、そのオブジェクトを参照していません。オブジェクトを作成し、オブジェクトがガベージ コレクションの対象になるように、参照なしでメソッドを呼び出すだけです。

ここに画像の説明を入力

于 2016-10-27T06:44:56.227 に答える
0

最初の呼び出しでは同じ目的を達成する可能性がありますが、2 つのアプローチは、クラスの定義とインスタンス化に関して根本的に異なることを行います。

ClassName object = new ClassName();`
object.method();`

これはインスタンス化のケースです。特定のインスタンス フィールドとメソッドを持つ新しい ClassName オブジェクトを作成します。これらのメソッドを呼び出すことができ、その結果によってインスタンス フィールドが変更される場合があります。

ClassName.method();

一方、このアプローチはクラスのインスタンスを作成しません。代わりにmethod、クラス属性として呼び出します。したがって、結果によって ClassName のフィールドが変更される可能性がありますが、既にインスタンス化されたオブジェクトの既存のフィールドが変更されるとは限りません。

public class ClassName(){
    public int attr = 0;
    public ClassName(){}

    public void setAttr(int value){
        this.attr = value;
    }

    public void method(int value){
        this.attr += value;
    }
}

ここで、最初のアプローチを使用して、 を作成し、newObjを呼び出すことができますnewObj.method(100)newObjこれにより、のインスタンス変数attrが 100増加します。

2 つのアプローチの違いを確認するために、 を使用setAttr(200)してオブジェクトattrを 200 に変更してみましょう。

次に、単に を使用すると、ClassName の今後のすべてのインスタンスでClassName.method(100)クラスの値が 100 になります。attrしたがって、 を作成するClassName nextObj = new ClassName()と、ClassName のこの新しいインスタンスはattr100 になりnewObjますが、それでもattr200 になります。

うまくいけば、これで 2 つのアプローチの主な違いが説明されます。

于 2016-10-27T07:56:11.767 に答える