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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨翔 中级黑马   /  2013-1-14 21:50  /  1886 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨翔 于 2013-1-15 22:34 编辑

在看线程课程视频的初期看到的,感觉很奇怪,我用this.name = name; 已经把名称赋给对象了啊,但是当我用 对象.getName 想在打印的时候显示我自定义的名称是不成功的,而是用super调用父类的setName方法就是可以成功的?我想不通的是 对象.getName不是调用的是对象的名称属性么,为什么非得用setName设置了名称,才能打印出自定义的名称呢
  1. class Demo extends Thread
  2. {
  3.    private String name;
  4.    Demo(String name)
  5.    {
  6.       this.name = name; //此处将自定义的名称赋给调用此方法的对象
  7.       //super(name);  用此方法就可以在打印时显示自定义的名称
  8.    }
  9.    public void run()
  10.    {
  11.       for(int i=0; i<60; i++)
  12.       {
  13.          System.out.println(this.getName() + "demo run------" + i);        
  14.       }        
  15.            
  16.    }        
  17. }

  18. class ThreadDemo
  19. {
  20.    public static void main(String[] args)
  21.    {
  22.       Demo d = new Demo("haha");  //将name传入构造函数
  23.       d.start();
  24.       
  25.       Demo h = new Demo("hiahia");
  26.       h.start();
  27.             
  28.              for(int x=0; x<60; x++)
  29.              {
  30.                 System.out.println("hello world------" + x);        
  31.              }
  32.    }        
  33. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 luck28 于 2013-1-14 22:35 编辑

private String name;

name只是Demo的一个成员属性,不是它的线程名字。

这句话改成这样this.name,就可以获取你要的结果。
System.out.println(this.name + "demo run------" + i);
回复 使用道具 举报
Thread

public Thread(String name)
分配新的 Thread 对象。这种构造方法与 Thread(null, null, name) 具有相同的作用。
参数:
name - 新线程的名称。
楼主你的this.name = name ;只是给你自己定义的类中的局部变量private String name;赋了值,并没有给线程赋值name,而在构造方法中super(...)
调用了父类Thread的构造方法,如上,传递的参数是该线程的名称,所以super(..)可以给线程设置名称,自然也可以用getName()方法取得
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马