public class Test implements Runnable{
public static void main(String[] args){

}

public Test(){
Test task = new Test();
new Thread(task).start();
}

public void run(){
System.out.println("test");
}
}能过编译,但是运行不了,如果把构造方法里面的语句放到main方法里就可以执行,请问这是为什么

解决方案 »

  1.   

    main函数中什么都没用他当然不会执行你预期的那些代码,线程的启动也要通过主函数的调用才能启动啊,不是你写了他就会启动的
      

  2.   

    public class Test implements Runnable{
    public static void main(String[] args){
           new Test();
    }public Test(){
    Test task = new Test();
    new Thread(task).start();
    }public void run(){
    System.out.println("test");
    }
    }打少了一句,main方法里面的
      

  3.   

    public class Test implements Runnable{ 
    public Test(){
      Thread task = new Thread(this);//既然是实现Runnable接口,那么怎么能实例类名呢?那必须是实例一个线程啊。 
      task.start();
    }
      
    public void run(){
       System.out.println("test");
    }

    public static void main(String[] args){
           new Test();
    }
    }
      

  4.   

    main是整个程序的入口,只有找到main方法,程序才会运行,你的程序是找到main方法了,可惜啥都没做就结束了,其他的没看,不知道是不是还有问题
      

  5.   

    你的线程都没启动,main方法里面要用代码启动才行。参考:
    public class TestTop { public static void main(String[] args) {
    // TODO Auto-generated method stub
    Tks t =  new Tks();//创建Tks类对象.
    Thread td = new Thread(t);//创建线程对象
    td.start();//启动线程

    }
    }class Tks implements Runnable { //外部类,实现Runnable接口
    public void run (){ //重写run方法.
    while (true){
    System.out.println("Tks");
    }
    }
    }
      

  6.   

    四楼已经告诉你了,你的程序递归调用了或者说死循环了,打出的异常信息也很清楚:Exception in thread "main" java.lang.StackOverflowError
    ... ...堆栈溢出了,当然跑不起来:
    当你创建一个Test对象实例时,结果在它的构造方法里,你又创建一个它自己,当创建一个它自己的对象实例时,又会执行Test的构造方法,这样就没有头儿了,什么时候是个结束能编译通过,说明你的程序没有语法上的错误,而你写的这个程序是逻辑上的错误
      

  7.   

    在java中,main()方法是java应用程序的入口方法。java虚拟机通过main方法找到需要启动的运行程序,并且检查main函数所在类是否被java虚拟机装载。如果没有装载,那么就装载该类,并且装载所有相关的其他类。因此程序在运行的时候,第一个执行的方法就是main()方法。通常情况下, 如果要运行一个类的方法,必须首先实例化出来这个类的一个对象,然后通过"对象名.方法名()"的方式来运行方法,但是因为main是程序的入口,这时候还没有实例化对象,因此将main方法声明为static的,这样这个方法就可以直接通过“类名.方法名()”的方式来调用。
      

  8.   

    main是程序入口,要在main里启动线程