public class Utilities
{
public static MyClass GetMyClass()
{
MyClass cls = new MyClass();
return cls;
}
}
この静的メソッドは、それが呼び出されるたびMyClass
の新しいインスタンスを返しますご検討ください!または同じインスタンスへの参照を何度も何度も返すでしょうか?
public class Utilities
{
public static MyClass GetMyClass()
{
MyClass cls = new MyClass();
return cls;
}
}
この静的メソッドは、それが呼び出されるたびMyClass
の新しいインスタンスを返しますご検討ください!または同じインスタンスへの参照を何度も何度も返すでしょうか?
static
メソッドを宣言すると、それはクラスメソッドであり、インスタンスなしで呼び出すことができます(使用するコンテキストにオブジェクトがないため、インスタンスメンバーにアクセスできません - this
)。
以下のコードを見てください。予想される出力:
[1] Different
[2] Same
あなたは変数がクラスの寿命を持っており、すべての時間もクラスにstatic
として変数を宣言し、同じオブジェクトを返すようにしたい場合:
public static String getThing(){
String r=new String("ABC");//Created every time the method is invoked.
return r;
}
private static String sr=new String("ABC");//Static member - one for the whole class.
public static String getStaticThing(){
return sr;
}
public static void main (String[] args) throws java.lang.Exception
{
String thing1=getThing();
String thing2=getThing();
if(thing1==thing2){
System.out.println("[1] Same");
}else{
System.out.println("[1] Different");
}
String thing1s=getStaticThing();
String thing2s=getStaticThing();
if(thing1s==thing2s){
System.out.println("[2] Same");
}else{
System.out.println("[2] Different");
}
}
この静的メソッドは、呼び出されるたびに
MyClass
の新しいインスタンスを返しますか?
はい。あなたは明示的に返す新しいインスタンスMyClass
を作成します。
new MyClass()
を呼び出すたびに新しいオブジェクトが作成されるため、新しいインスタンスが返されることが期待できます。このメソッドを2回呼び出して結果を比較することで確認できます。
静的でも動的でもありません。単なるインスタンスです。それは開発者とオブジェクトの使い方に依存します。
静的メソッドが呼び出されるたびに、新しいインスタンスが作成されます。
新しいキーワードが作成されますメソッドが呼び出されたすべての新しいインスタンスと、インスタンスが呼び出し元に返されます。 staticキーワードは、メソッドがクラスレベルで利用可能であることをコンパイラに通知します。呼び出し元は返されたインスタンスを使用できます。
*明示的に*毎回新しいインスタンスを作成します... – jonrsharpe
静的なメソッドです。つまり、メソッド(コンテンツ)内のすべてが静的として表され、オブジェクトに関連付けられていないものです。しかし、メソッドの内容は毎回新しいオブジェクトを作成し、それをあなたに返します。 – Denys
これはあなたが本当にテストが必要と思っている場合には、自分でテストできるはずのものです。 MyClassのコンストラクタにSystem.out.println( "hello")を追加し、静的メソッドを5回呼び出し、helloが何回出力されたかを確認します。 –