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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋旭东 中级黑马   /  2013-7-4 16:59  /  1590 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  • public class Car{
  • private String color;
  • private String num;
  • Car(){
  • int num=4;
  • String color="red";
  • }
  • public static void main(String args[]){
  • Car ca=new Car();
  • run(ca);
  • }
  • static void run(Car a){
  • System.out.print(a.num+","+a.color);
  • }
  • }
    难道不是在创建对象时调用其对应得构造方法初始化值吗?上面程序不知道在创建对象时为什么没有初始化值?求解?

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
袁梦希 + 1 很给力!
张勇1993 + 3

查看全部评分

4 个回复

倒序浏览
我来回答你的问题。
首先你定义私有对象是:2.private String color;
                                    3.private String num;
然后你的构造方法是:4.Car(){
                                5.    int num=4;
                                6.    String color="red";
                                7.}
你的问题:1,构造方法中你又重新定义了num和color两个属性值。和你前面的定义私有对象重复了。
          2,你的静态方法:12.static void run(Car a){
                                           13.System.out.print(a.num+","+a.color);
                                           14.}
                    调用的是ca类中的私有对象。你的构造方法没有初始化里面的值。所以结果你: 0,null
改进的代码:
  1. public class Car {
  2.         private String color;
  3.         private int num;
  4.         Car(){
  5.                 num = 4;
  6.                 color = "red";
  7.         }
  8.         static void run(Car a){
  9.                 System.out.println(a.num+","+a.color);
  10.         }
  11.         public static void main(String[] args) {
  12.                 Car ca = new Car();
  13.                 run(ca);
  14.         }
  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张勇1993 + 1 很给力!

查看全部评分

回复 使用道具 举报
  1. public class Car
  2. {
  3.         private String color;
  4.         private String num;

  5.         Car()
  6.         {       
  7.                 /*
  8.                 int num = 4;//这里的num是局部变量,而非你定义的成员变量,其作用域范围只是在大括号内,出了大括号便失效
  9.                 String color = "red";//理由同上
  10.                 */
  11.                 //改为:
  12.                 this.num = "4";
  13.                 this.color = "red";
  14.         }

  15.         public static void main(String args[])
  16.         {
  17.                 Car ca = new Car();
  18.                 run(ca);
  19.         }

  20.         static void run(Car a)
  21.         {
  22.                 System.out.print(a.num + "," + a.color);
  23.         }
  24. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
2:写成private int num;你试试。12:void run()写在class Car 里。不需要static。建议先把顺序写成类--属性--方法--主函数--调用类方法。你再看看
回复 使用道具 举报
Car(){
int num=4;
String color="red";
}
首先1.private String num 写错了吧,应该为int ;
2.这里定义与类相同局部变量,是名字相同而已,地址改变了,如果要引用本类的是
this.num = 4;
this.color = "red";
才正确。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马