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不标准)的地方吗?
这两个东西不是一回事,你在new数组的时候会给这100个Product引用赋予默认值就是null
,而new Product则是给引用赋予一个Product对象
再说下你这代码的问题
addProduct里面只需要 this.product[lastNum] = product;
你传参数进来了,如果不是null,那么肯定是一个对象值,没必要先给lastNum new一个再赋值,直接把参数赋给数组元素就行了
还有就是lastNum应该还要加1操作,还要判断lastNum是不是越界了等等
+1 new Product[100];
数组长度100,里面的值都是null。
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只是对象的引用。
还有Product和Store不是同一个.java文件吧(你懂的)