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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© amen0205 中级黑马   /  2013-3-6 21:34  /  2044 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 门文通 于 2013-3-8 03:38 编辑
  1. class Test  extends Thread  
  2. {
  3.         private String name;
  4.         Test(String name)
  5.         {
  6.                 this.name=name;
  7.                 //super(name);
  8.         }
  9. }
复制代码
多线程中  继承Thread类的子类如图定义构造函数并不能修改掉线程名  必须使用注释掉的字段才可以  为什么?  Thread类中对命名的方法是怎样的?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
这样命名没问题
但是 super语句一定要定义在子类构造函数的第一行, 所以你的发生错误。
把他们顺序调换一下就行了。
回复 使用道具 举报
李志卫 发表于 2013-3-6 21:51
这样命名没问题
但是 super语句一定要定义在子类构造函数的第一行, 所以你的发生错误。
把他们顺序调换一 ...

我的这两句是选择关系,要么第一句 要么第二句  所以没有顺序的对调问题   关键是  如果如果是第一句   线程名还是Thread-0  这种形式的     你传个abc进去  没用
回复 使用道具 举报
林明华 发表于 2013-3-6 21:52
class Test  extends Thread  
{
        private String name;

共有也不行  因为 name又没被外界访问   不涉及私有的事
回复 使用道具 举报
门文通 发表于 2013-3-6 22:00
我的这两句是选择关系,要么第一句 要么第二句  所以没有顺序的对调问题   关键是  如果如果是第一句    ...

不好意思我不是很明白你的意思
如果你想一开始创建的线程就有个名字,那么就直接super(name)
如果创建后改名字,那么就用 Test.setName()方法

Thread内部有方法能改变当前创建线程的名字,但没有暴露出来,但在Thread的构造函数中用到了
Thread(String name) ,所以我想在创建期间,你想给线程起名字,除了用父类的方法,就没其他方法了。
回复 使用道具 举报
李志卫 发表于 2013-3-6 22:18
不好意思我不是很明白你的意思
如果你想一开始创建的线程就有个名字,那么就直接super(name)
如果创建后 ...

是吧  我也知道用super(name)是可以的  我现在就是不知道为什么直接写 this.name=name;不可以,然后Thread(String name)的代码在API中也没有  ,不知道是怎么定义的
回复 使用道具 举报
  1. 呵呵,通哥,你到底想怎样!你看把上面两个哥急的呀,呵呵
  2. 这是我修整后的程序,能通过this.name=name方式修改线程名字的完成代码,下面
  3. public class test01 extends Thread {
  4.         private static String name;
  5.         public test01(String name) {
  6.                 this.name = name;
  7.         }
  8.         public static void main(String[] args) {
  9.                 test01 t = new test01("线程 1");
  10.                 System.out.println("线程原来的名字"+t.getName());
  11.                 t.setName(name);                              //声明Thread线程类本身就有getName()和setName()方法,直接调用来获取线程名字就可以了
  12.         t.start();
  13.         }
  14.         public void run(){
  15.                 System.out.println("修改后的名字"+getName());
  16.                 System.out.println("执行run方法");
  17. }
  18. }
  19. 执行结果:
  20. 线程原来的名字: Thread-0
  21. 修改后的名字: 线程 1
  22. 执行run方法
复制代码
回复 使用道具 举报
克零岚 发表于 2013-3-7 11:33

呵呵  见笑了  其实我明白怎么回事了    我想知道的是 Thread中  的构造函数时怎么定义的  呵呵  我自己找文档好了   你是要进18期吗  加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马