黑马程序员技术交流社区

标题: 请问为何打印结果中的年龄都为0? [打印本页]

作者: 冷月霜飞    时间: 2015-6-4 11:50
标题: 请问为何打印结果中的年龄都为0?
代码如下:
  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?
作者: 2666fff    时间: 2015-6-4 11:53
public Demo(String name,int a){
                this.name =name;
                int age = a;
        
        }

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

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

this是要在第一句,但不是说只能出现一个this。这个在第一个语句只是相对与普通的语句来说的
作者: 熊乾坤    时间: 2015-6-4 13:21
this调用的是本类成员变量1
作者: 冷月霜飞    时间: 2015-6-4 13:40
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
复制代码


问题依旧没解决!
作者: 呆呆怪兽    时间: 2015-6-4 16:45
this.age = a;  // 亲爱的,不要太调皮,传的参数是int a 。你this.age = age;这后面的age谁认识是哪个啊。
作者: wangkai    时间: 2015-6-4 16:59
路过学习学习
作者: forTomorrow    时间: 2015-6-4 18:01
呆呆怪兽 发表于 2015-6-4 16:45
this.age = a;  // 亲爱的,不要太调皮,传的参数是int a 。你this.age = age;这后面的age谁认识是哪个啊。 ...

哈哈,太逗了,楼主的基础需要加强哈!
作者: bin2015    时间: 2015-6-4 19:19
本帖最后由 bin2015 于 2015-6-4 19:25 编辑

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

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

QQ图片20150604191321.png

作者: 姬光普    时间: 2015-6-4 20:22
楼主太调皮了:handshake
作者: 付欢    时间: 2015-6-4 20:26
是不是age没定义好  this.age=age
作者: Monster    时间: 2015-6-4 20:53
19行的int age = a,改为this.age = a;
作者: 白水丶    时间: 2015-6-4 21:33
int age     age为局部变量
作者: 小车车    时间: 2015-6-4 21:36
上面有楼已经回答了,我就不回答了。我来看看
作者: 冷月霜飞    时间: 2015-6-5 06:25
forTomorrow 发表于 2015-6-4 18:01
哈哈,太逗了,楼主的基础需要加强哈!

是的,是的,是我疏忽了,谢谢师兄!哈哈!已解决!
作者: lizhi    时间: 2015-6-5 07:03
冷月霜飞 发表于 2015-6-4 11:50
代码如下:



this.age=a;我们应该在写标准类是习惯this.age=age,这样就不会错
作者: 古风_菜鸟    时间: 2015-6-5 09:53
学习了学习了




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