A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周兴华 中级黑马   /  2012-8-24 19:26  /  1725 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周兴华 于 2012-8-24 19:28 编辑

代码如下:
public class ThreadDemo {
public static void main(String[] args){
  Test1 t=new Test1("mythread");
  t.start();
}
}
class Test1 extends Thread{
public void run(){
  for(int i=0;i<50;i++){
   System.out.println(this.getName()+" run"+i+"次");
  }
}
}
在API中Thread类的构造方法中有这么一条:
public Thread(String name)分配新的 Thread 对象。这种构造方法与 Thread(null, null, name) 具有相同的作用。 参数name - 新线程的名称。
问题是如果代码中的 Test1 t=new Test1("mythread");改为 Test1 t=new Test1();就能通过编译,而按照API中的构造方法Thread(String name)去创建Thread对象就不能通过编译,
这是为什么呢?

4 个回复

倒序浏览
public class ThreadDemo1 {
public static void main(String[] args){
Test1 t=new Test1("mythread"); //你的源程序根本没有Test(String str);这个构造函数,所以每次调用失败!  
t.start();
}
}
class Test1 extends Thread{
Test1(String name) //创建一个String参数的构造方法,用super(name)调用父类的构造方法就可以了
{
  super(name);
}
public void run(){
  for(int i=0;i<50;i++){
   System.out.println(this.getName()+" run"+i+"次");
  }
}
}
回复 使用道具 举报
你要往Test1里传值,必须的有构造函数。但是你的程序里没有,加上就行了。
回复 使用道具 举报
你没有带参数的Test1构造函数,默认构造函数是不带参数,你当让不能往Test1里面传值
Test1 t=new Test1("mythread");这句肯定是编译不通过的.
而关于Thread(String name)这个.是这么用的
class A implementsRunnable
{
public void run()
{
}
}
在主函数里面开启新的线程
new Thread(new A()).start();
回复 使用道具 举报
必须有public Thread(String name); 这个构造函数才可以使用setName来设置线程名。

然后再构造函数里用super(name)就可以了。。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马