Java の OOP の概念は初めてです。この二つの事件の違いは何ですか?
1.
ClassName obj_name = new ClassName();
obj_name.method();
2.
new ClassName().method();
良い説明は大歓迎です。ありがとう
Java の OOP の概念は初めてです。この二つの事件の違いは何ですか?
1.
ClassName obj_name = new ClassName();
obj_name.method();
2.
new ClassName().method();
良い説明は大歓迎です。ありがとう
最初の呼び出しでは同じ目的を達成する可能性がありますが、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 のこの新しいインスタンスはattr
100 になりnewObj
ますが、それでもattr
200 になります。
うまくいけば、これで 2 つのアプローチの主な違いが説明されます。