0
class MyThread extends Thread 
{
    MyThread() 
    {
        System.out.print(" MyThread");
    }
    public void run() 
    {
        System.out.print(" bar");
    }
    public void run(String s) 
    {
        System.out.println(" baz");
    }
}
public class TestThreads 
{
    public static void main (String [] args) 
    {
        Thread t = new MyThread() 
        {
            public void run() 
            {
                System.out.println(" foo");
            }
        };
        t.start();
    }
}

こんにちは、私は Java の初心者で、現在マルチスレッドを学習しています。上記のプログラムを実行すると、この特定の出力MyThread fooが表示されます。理由を説明してください。

4

6 に答える 6

4

MyThreadはコンストラクターから取得されます

fooは、runが呼び出されたときに呼び出されるメソッドから取得start()されます。

基本的に、run()メソッド ( bazを出力する) は でオーバーライドされますmain

run(String s)オーバーロードされたメソッドであり、ここでは意味がありません。

于 2013-05-27T06:02:34.100 に答える
1

MyThreadコンストラクターを実行してからメソッドrun()を実行しています。

Thread t = new MyThread()MyThreadオブジェクトを作成しようとしているため、コンストラクターが実行されます。

MyThread() 
{
    System.out.print(" MyThread");
}

次に、スレッドを開始すると、オーバーライドしt.start();たメソッドが実行されます。run()main(String[] args)

public void run() 
{
     System.out.println(" foo");
}
于 2013-05-27T06:03:48.337 に答える
1

MyThreadまず、コンストラクターを呼び出して "MyThread" を出力する のインスタンスを作成します。次に、メソッドを呼び出すt.start();which を呼び出しますrun

run" bar"を出力するメソッドを定義したとしても、メソッド内のmainメソッド (" foo" を出力する) によってオーバーライドされます。

次のことを試してください。

Thread t = new MyThread();
t.start();

そして何が起こるか見てください!

于 2013-05-27T06:04:11.010 に答える
1

その理由は、最初に create object が呼び出されたときにコンストラクターが呼び出されMyThread、文字列の最初の部分が出力されるためです。スレッドを開始すると、 run メソッドと print で実行が続行されますfoo

于 2013-05-27T06:05:01.597 に答える
1

MyThreadのデフォルト コンストラクター内の最初の出力で、メソッドをオーバーライドします。run()

Thread t = new MyThread() 
        {
            public void run() 
            {
                System.out.println(" foo");
            }
        };

出力:

スレッド フー

Thread t = new MyThread() ;

出力:

マイスレッドバー

最初のものはrun()メソッドをオーバーライドし、その中でカスタム メッセージを使用しましたが、2 つ目はMyThreadクラスrun()でデフォルトでオーバーライドされることに注意してください。

于 2013-05-27T06:05:16.280 に答える