Given:
2. class Paratrooper implements Runnable {
3. public void run() {
4. System.out.print(Thread.currentThread().getName() + " ");
5. } }
6. public class Jump {
7. static Paratrooper p;
8. static { p = new Paratrooper(); }
9. { Thread t1 = new Thread(p, "bob"); t1.start(); }
10. public static void main(String[] args) {
11. new Jump();
12. new Thread(new Runnable() { public void run()
{ ; }}, "carol").start();
13. new Thread(new Paratrooper(), "alice").start();
14. }
15. Jump() { Thread t2 = new Thread(p, "ted"); t2.start(); }
16. }上述代码输出,正确答案是:The output could be ted bob alice我认为答案是:bob ted alice我的理由是:main方法先运行11行,因为初始化Jump对象时,在构造块和构造器里分别new出线程,但由于Jump对象先初始化构造块,后调用构造器,所以运行完11行以后,将会输出bod ted然后再执行main方法的12行,这行看不懂,但它重写了run()方法,没有打印任何东西。坦率地说,我看不懂12行,new线程对象时,第一个参数是Runnable接口,如何能实例化一个接口呢?main方法运行13行,13行输出alice。请教高手:当在同一个类的静态块里启用一个线程,又在构造器里启用另一个线程,它们难道没有先后顺序么?线程多线程ocjp实例化对象