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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

代码如下:
  1. public class ThreadDemo {

  2.         public static void main(String[] args) {
  3.                 Demo d1 = new Demo("小强",23);
  4.                 Demo d2 = new Demo("旺财",12);
  5.                 d1.start();
  6.                 d2.start();
  7.                                
  8.         }

  9. }

  10. class Demo extends Thread {
  11.         private String name ;
  12.         private int age;
  13.        
  14.         public Demo(String name,int a){
  15.                 this.name =name;
  16.                 int age = a;
  17.        
  18.         }
  19.        
  20.         public void run(){
  21. //                int [] arr = new int [4];
  22. //                System.out.println(arr[3]);
  23.                 for(int x=0;x <= 3;x++){
  24.                         System.out.println("name="+name+"&&"+"age="+age+"..."+Thread.currentThread().getName()+"***"+x);

  25.                 }
  26.         }
  27.        
  28. }
复制代码


打印结果如下:
  1. name=旺财&&age=0...Thread-1***0
  2. name=旺财&&age=0...Thread-1***1
  3. name=小强&&age=0...Thread-0***0
  4. name=旺财&&age=0...Thread-1***2
  5. name=旺财&&age=0...Thread-1***3
  6. name=小强&&age=0...Thread-0***1
  7. name=小强&&age=0...Thread-0***2
  8. name=小强&&age=0...Thread-0***3
复制代码


请问为何打印结果中的年龄都为0?

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

19 个回复

倒序浏览
public Demo(String name,int a){
                this.name =name;
                int age = a;
        
        }

age被定义成局部了,你之前定义的私有变量没有使用,这里也用this.age就行了
回复 使用道具 举报
....楼上正解,这种小问题最纠结了,自己检查还看不出来,只能仔细慢慢来了,我一开始也没看出来 ~~~~~
回复 使用道具 举报
2666fff 发表于 2015-6-4 11:53
public Demo(String name,int a){
                this.name =name;
                int age = a;

谢谢师兄回复!但是this只能定义在构造函数的第一行,第一行用了this.name,以后就不能再用this了!
回复 使用道具 举报
冷月霜飞 发表于 2015-6-4 12:00
谢谢师兄回复!但是this只能定义在构造函数的第一行,第一行用了this.name,以后就不能再用this了! ...

this是要在第一句,但不是说只能出现一个this。这个在第一个语句只是相对与普通的语句来说的
回复 使用道具 举报
this调用的是本类成员变量1
回复 使用道具 举报
bin2015 发表于 2015-6-4 12:05
this是要在第一句,但不是说只能出现一个this。这个在第一个语句只是相对与普通的语句来说的 ...

这是修改后的代码
  1. public class ThreadDemo {

  2.         public static void main(String[] args) {
  3.                 Demo d1 = new Demo("小强",23);
  4.                 Demo d2 = new Demo("旺财",12);
  5.                 d1.start();
  6.                 d2.start();
  7.                                
  8.         }

  9. }

  10. class Demo extends Thread {
  11.         private String name ;
  12.         private int age;
  13.        
  14.         public Demo(String name,int a){
  15.                 this.name =name;
  16.                 this.age = age ;
  17.        
  18.         }
  19.        
  20.         public void run(){
  21. //                int [] arr = new int [4];
  22. //                System.out.println(arr[3]);
  23.                 for(int x=0;x <= 3;x++){
  24.                         System.out.println("name="+name+"&&"+"age="+age+"..."+Thread.currentThread().getName()+"***"+x);
  25.                 }
  26.         }
  27.        
  28. }
复制代码


这是修改后运行的结果:
  1. name=小强&&age=0...Thread-0***0
  2. name=旺财&&age=0...Thread-1***1
  3. name=小强&&age=0...Thread-0***1
  4. name=旺财&&age=0...Thread-1***2
  5. name=小强&&age=0...Thread-0***2
  6. name=旺财&&age=0...Thread-1***3
  7. name=小强&&age=0...Thread-0***3
复制代码


问题依旧没解决!

点评

LZ你是不是在逗我。public Demo(String name,int a){this.age = age ??  发表于 2015-6-4 19:26
回复 使用道具 举报
this.age = a;  // 亲爱的,不要太调皮,传的参数是int a 。你this.age = age;这后面的age谁认识是哪个啊。
回复 使用道具 举报
路过学习学习
回复 使用道具 举报
呆呆怪兽 发表于 2015-6-4 16:45
this.age = a;  // 亲爱的,不要太调皮,传的参数是int a 。你this.age = age;这后面的age谁认识是哪个啊。 ...

哈哈,太逗了,楼主的基础需要加强哈!
回复 使用道具 举报
本帖最后由 bin2015 于 2015-6-4 19:25 编辑

你这句里只传局部变量a,可是又没有用到a变量。把a改成age试试看。age是成员变量,有默认初始化值所以都是0;
而且你私有了成员变量没有写set和get方法

QQ图片20150604191321.png (5.12 KB, 下载次数: 22)

QQ图片20150604191321.png
回复 使用道具 举报
楼主太调皮了:handshake
回复 使用道具 举报
是不是age没定义好  this.age=age
回复 使用道具 举报
19行的int age = a,改为this.age = a;
回复 使用道具 举报
int age     age为局部变量
回复 使用道具 举报
上面有楼已经回答了,我就不回答了。我来看看
回复 使用道具 举报
forTomorrow 发表于 2015-6-4 18:01
哈哈,太逗了,楼主的基础需要加强哈!

是的,是的,是我疏忽了,谢谢师兄!哈哈!已解决!
回复 使用道具 举报
lizhi 来自手机 中级黑马 2015-6-5 07:03:14
18#
冷月霜飞 发表于 2015-6-4 11:50
代码如下:



this.age=a;我们应该在写标准类是习惯this.age=age,这样就不会错
回复 使用道具 举报
学习了学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马