10

OOP では、インスタンス = オブジェクトであることを知っています。したがって、次のようなクラスがあるとします。

public class something
{
    public static void main(String args[])
    {
    }
}

メインメソッドのこの行は新しいオブジェクトを作成しますinstanceか?

something instance=new something();

私の 2 番目の質問は似ています:Threadオブジェクトを作成Thread t1=new Thread();した場合、それは実際に class のインスタンスを作成したことを意味するのThreadでしょうか。そこからメソッドを静的に呼び出すことができますか? (例sleep())。

4

4 に答える 4

12

Thread オブジェクトを作成する場合 - Thread t1=new Thread(); メソッドを静的に呼び出すことができるクラス Thread のインスタンスを作成したことを実際に意味するのでしょうか? (例: sleep())。

静的メソッドを呼び出す場合、オブジェクトから呼び出すのではありません。それが静的な理由です。インスタンスが静的メソッドを実行する必要はありません。

Thread t1 = new Thread();
t1.checkAccess();  // <--- This is an instance method.

Thread.activeCount(); // <-- This is a static method.

キーワードが表示newされている場合は、新しいオブジェクトが作成されていることを意味します。この場合、Threadあなたが言ったように、それは class のインスタンスでした。

どのようにそれらを区別しますか?

まあ、それは簡単です。インスタンス メソッドの場合は、オブジェクトのコンテキストから呼び出されます。

String str = new String("hello");
str = str.replaceAll("o", "");

ご覧のとおり、インスタンス メソッドを使用するにはインスタンスを作成する必要があります。

静的メソッドを使用すると、さらに簡単になります。それらは、クラスの名前だけで呼び出されます。

String.copyValueOf(new char[] {'a', 'b', 'c'});

新しいStringインスタンスを作成する必要はありません。クラスの名前を使用するだけです。

: コメントで指摘されているように、静的メソッドインスタンス オブジェクトから呼び出すことができますが、これは一般的な方法ではありません。確信が持てない場合は、ドキュメンテーションが最良の友です。または、静的コンテキストから同じメソッドを呼び出してテストすることもできます。

インスタンス メソッドの代わりに静的メソッドを使用する場合

Java: 静的メソッドをいつ使用するか、それを繰り返すことに意味がありません:)

于 2013-08-07T14:37:23.267 に答える
2

引用した両方のケースでオブジェクトが作成されます。

something instance=new something();
Thread t1=new Thread();

ただし、2 番目のケースでは、Thread オブジェクトは作成されますが、ユーザーが開始するまでスレッドは開始されません。

メソッドを静的に呼び出すことができるクラス Thread のインスタンスを作成したことを実際に意味するのでしょうか? (例: sleep())。

静的メソッドを呼び出すためのオブジェクトは必要ありません。静的メソッドは、特定のインスタンスではなく、クラス全体に適用されます。次のように Thread.sleep() を呼び出すことができます。

Thread.sleep( 500 );
于 2013-08-07T14:37:52.050 に答える
1

あなたの最初の質問に対して、はい、それはsomething変数のインスタンスを作成しますinstance(ちなみに、素晴らしい変数名ではありません)。

2 番目の質問に対して、はい、そのコードは Thread のインスタンスを作成します。ただし、それを使用して静的メソッドを呼び出すことはありません ( などt1.sleep())。静的メソッドはクラス名で呼び出されます (例: Thread.sleep. それらのインスタンスを作成する必要はありません。

于 2013-08-07T14:39:41.073 に答える