public class Product
{
//code
}
public class Store
{
int lastNum;
Product product[];
Store()
{
product = new Product[100];
}
public  addProduct(Product product)
{
this.product[lastNum] = new Product();//问题见下面
this.product[lastNum] = product;
}
}我的问题是为什么构造的时候创建了空间,添加product的时候还要使用new呢?
我是才学的java,这段代码还有其他错误(or不标准)的地方吗?

解决方案 »

  1.   

    首先说的是数组的new和数组元素的new
    这两个东西不是一回事,你在new数组的时候会给这100个Product引用赋予默认值就是null
    ,而new Product则是给引用赋予一个Product对象
    再说下你这代码的问题
    addProduct里面只需要 this.product[lastNum] = product;
    你传参数进来了,如果不是null,那么肯定是一个对象值,没必要先给lastNum new一个再赋值,直接把参数赋给数组元素就行了
    还有就是lastNum应该还要加1操作,还要判断lastNum是不是越界了等等
      

  2.   


    +1 new Product[100];
    数组长度100,里面的值都是null。
      

  3.   

    构造函数是初始化了成员变量product[]这个数组,长度为100,里面的数据都是Product,但是Product这个对象并没有设置内容,addProduct方法是吧数组最后标识为lastNum的定为Product,LZ的重复了,赋值后又给赋值了。最后是后面赋值的内容
      

  4.   

    构造函数是定义了一个长度为100的数组,addProduct里则是初始化具体的一个元素
      

  5.   

    我的理解如下:
    Product product[];//建议写成下面的形式:
    Product[] product; //它相当于下句:
    Product[] product=null; 
    //上面语句的功能是:
    (1)声明了一个变量product;
    (2)这个变量用来持有数组的引用;(即product本身并不是数组,它只是指向数组的引用)
    (3)product所引用的数组是用来持有Product对象的引用的;
      (即:把数组的每一项看成是一个变量,而这些变量都是用来持有Product对象的引用的)
      (两个引用:product是指向数组的引用,数组的每一项是指向Product对象的引用)
    (4)product=null,也就是说,product目前还没有指向任何一个数组。product = new Product[100];
    这句的功能是:
    (1)创建了一个有100个项的Product数组;
    (2)product指向了这个数组;
      (此时product有了具体指向了,但是它所指向的这个Product数组的每一项目前是 null ,是空白的)this.product[88] = new Product();
    上面的语句功能是:
    (1)创建了一个对象;
    (2)把这个对象的引用赋给了this.product[88]。重要的概念:
    (1)变量也好,数组的每一项也好,只有持有“基本类型”的数据时才是具体值,而对于对象而言,变量只能持有对象的引用。(为了便与理解,你就把所谓的引用看作是对象在内存中的首地址)
    (2)我们常把引用了对象的xx变量看成是xx对象,但是我们要清楚,实际上xx只是对象的引用。
      

  6.   

    某个公司新接一个项目需要100人做,然后该项目管理者就在项目设计稿里写上“100个程序员”,但是项目进行开发时,必须一一指定,这个100个程序员到底是谁谁谁。所以楼主开始new的数组只是告诉编译器,你需要100装100个对象,但是并没有告诉它这些对象在哪里或者是谁,然后你在用到他们的时候自然要再次new出来,告诉它就是这个对象啦。呵呵...
      

  7.   

    这个方法好像没有返回值
    还有Product和Store不是同一个.java文件吧(你懂的)
      

  8.   

    感谢大家的帮助,MSDN果然是一个学习的好地方O(∩_∩)O~