黑马程序员技术交流社区
标题:
关于线程中getName()返回值问题
[打印本页]
作者:
何明辉
时间:
2012-7-23 23:47
标题:
关于线程中getName()返回值问题
本帖最后由 何明辉 于 2012-7-24 09:57 编辑
class XianCheng extends Thread
{
private String name;
XianCheng(String name)
{
//super(name);————————1
this.name=name;
}
public void run()
{
for(int i=60;i>0;i--)
{
System.out.println(this.getName()+"----hello");
}
}
}
class XianChengDemo
{
public static void main(String[] args)
{
XianCheng p1=new XianCheng("one");
XianCheng p2=new XianCheng("two");
p1.start();
p2.start();
for(int i=60;i>0;i--)
{
System.out.println("main");
}
}
}
程序中若也编译1处的话则线程p1和p2返回的名称分别是one和two;那至少说明一点getName()方法中肯定去访问name(父类)的值,然后返回该值,但是如果父类Thread中相应的name(不一定是name,一定和此类似)没有赋值的话,则会指向空,应该说返回的是null,但为什么还能返回线程的默认值啊,它和name有什么关系,它是怎么返回起默认值的啊,貌似毕老师也没有讲,求大家给我说一下,谢谢
作者:
乐峰
时间:
2012-7-24 00:03
class XianCheng extends Thread
{
private String name;
XianCheng(String name)
{
//super(name);————————1
this.name=name;
}
public void run()
{
for(int i=60;i>0;i--)
{
System.out.println(this.getName()+"----hello");
}
}
}
class XianChengDemo
{
public static void main(String[] args)
{
XianCheng p1=new XianCheng("one");
XianCheng p2=new XianCheng("two");
p1.start();
p2.start();
for(int i=60;i>0;i--)
{
System.out.println("main");
}
}
说明一点getName()方法中肯定去访问name(父类)的值,然后返回该值,父类中name的值是通过调用getName()实现的,该方法返回的值是从Thread-0开始给线程名字赋值,为什么是这个值,而不是null,是因为该值就是父类内部定义好的,在你不复写改变父类setName()方法的值,那么this.getName调用的值就是父类的name值,即Thread-x,而不是null。
作者:
李菁
时间:
2012-7-24 00:17
class XianCheng extends Thread
XianCheng类继承Thread类。Thread 类中有一个name属性,XianCheng类中可以使用或为该变量赋值
{
private String name;
XianCheng(String name)
{
//super(name);————————1
使用super(name) 其实调用的是Thread 类中的public final String getName()方法为name 赋值。如果不显示调用,程序也会隐式调用父类的默认值
this.name=name;
}
public void run()
{
for(int i=60;i>0;i--)
{
System.out.println(this.getName()+"----hello");
}
}
}
作者:
郭凯敏
时间:
2012-7-24 00:37
本帖最后由 郭凯敏 于 2012-7-24 01:00 编辑
在API中有这么一句话:
1.jpg
(13.49 KB, 下载次数: 59)
下载附件
2012-7-24 00:31 上传
你使用的getName方法是从父类中继承来的,你没重写父类的构造(由于你把子类构造方法中Super(name)注释了),所以getName无法获得你线程子类中自定义的线程名称,这时候系统认为你没有给他起新的名字来标识,
他就为其自动产生一个名字
Thread-n。
作者:
肖琦
时间:
2012-7-24 00:55
线程都有的默认名称:
通过线程的getName()方法获得;规律是:Thread-编号,编号是从0开始的
其实视频上有讲到这一点,你看看11天-06课吧,好像是原话,以上是我做的笔记.....
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2