黑马程序员技术交流社区

标题: 获取线程对象名称 [打印本页]

作者: 邵阳    时间: 2012-7-9 18:36
标题: 获取线程对象名称
第一个代码:
class  Demo  extends Thread
{
  public Demo(String name)
{
  super(name);
   }
public void run()
{
  for (int i=0;i<60 ;i++ )
  {
   System.out.println(this.getName()+"。。。。Hello World!......"+i);
  }
  
}
}
class  Test
{
public static void main(String[]args)
{
  Demo d1=new Demo("邵阳");
  Demo d2=new Demo("郭圆");
  d1.start();
  d2.start();
  for (int i=0;i<60 ;i++)
  {
   System.out.println("主函数hello....."+i);
  }
  
}
}第二段代码:
class  Demo  extends Thread
{
private String name;
public Demo(String name)
{
    this.name=name;
}
public void run()
{
  for (int i=0;i<60 ;i++ )
  {
   System.out.println(name+"。。。。Hello World!......"+i);
  }
  
}
}
class  Test
{
public static void main(String[]args)
{
  Demo d1=new Demo("邵阳");
  Demo d2=new Demo("郭圆");
  d1.start();
  d2.start();
  for (int i=0;i<60 ;i++)
  {
   System.out.println("主函数hello....."+i);
  }
  
}
}
我疑惑的是两段代码都可以打印出名称,没什么区别啊。
第一段代码打印出的名称是线程名称,那第二段代码打印出的名称难道不是线程名称。


作者: 王红潮    时间: 2012-7-9 19:07
第一段
class  Demo  extends Thread
{
        public Demo(String name)
        {
                super(name);
        }
其中的super(name) 是调用的父类Thread中的构造函数Thread(String name);
而第二段
class  Demo  extends Thread
{
        private String name;
        public Demo(String name)
        {
                this.name=name;
        }
中的this.name是本类中的,虽然结果都一样,但代码代表的意思不一样。

作者: 邵阳    时间: 2012-7-9 20:05
王红潮 发表于 2012-7-9 19:07
第一段
class  Demo  extends Thread
{

哥们我问的问题是
第一段代码打印出的名称是线程名称,那第二段代码打印出的名称难道不是线程名称?




作者: 尹善波    时间: 2012-7-9 20:41
第二个只是一个简单的函数调用
作者: 李东升    时间: 2012-7-9 21:54
第一个是线程名称,super调用父类构造方法,this.getname()获取线程名称,获取是对的。
第二个是你传的参数,而且调用的也是参数名,只是你刚好打印的name属性跟Demo d1=new Demo("邵阳");Demo d2=new Demo("郭圆");这传递进去的一样,所以名字也一样。你把第二段代码的构造函数去掉,结果是什么样子?没有getname()方法,打印不出来的。所以第二个打印的,不是线程名称。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2