请教关于java数组初始化的问题?

来源:百度知道 编辑:UC知道 时间:2024/05/16 07:07:38
看下这个示范:
class shuzu_1
{
int a;
shuzu_1(int a)
{
this.a=a;
System.out.println(a);
}
}
public class shuzu
{
shuzu_1[] a1;
public shuzu()
{
a1=new shuzu_1[]{new shuzu_1(1);shuzu_1(2);shuzu_1(3)}
System.out.println(a1);
}
public static void main(String[] args)
{
shuzu a2=new shuzu();
}
}
编译之后:除了1,2,3 还会有一个类shuzu_1的地址
请问为什么会出现这个地址?
如果我想让shuzu_1[]有5个位置,只实例化3个,还有2个返回null该怎么编?
打错了一点点 a1=new shuzu_1[]{new shuzu_1(1),new shuzu_1[2],new shuzu_1[3]};

问题:编译之后:除了1,2,3 还会有一个类shuzu_1的地址
请问为什么会出现这个地址?
回答:首先,你注释掉System.out.println(a1);再运行,没有那个地址了吧。可想而知,是打印这个对象数组的时候才出现,为什么这样呢, System.out.println(a1)的意思也就是System.out.println(a1.toString()),而这个方式的api为:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
其实对对象的打印,默认情况下都是调用的Object的toString()方法,除非该类已经覆盖了这个方法
如果我想让shuzu_1[]有5个位置,只实例化3个,还有2个返回null该怎么编?

楼上是一种方法,另外也可用在你的基础上做一个小小的改动
a1=new shuzu_1[]{new shuzu_1(1), new shuzu_1[2], new shuzu_1[3], null, null};

a1=new shuzu_1[]{new shuzu_1(1), new shuzu_1(2), new shuzu_1(3), null, null};

在class shuzu_1 中增加一个方法:
public String toString(){
return String.valueOf(a);
}
另外,将构造方法中的System.out.println(a); 去掉,否则会重复。

这样打印出来的就没有你说的地址了。

System.out.println(a1);

这一句有问题,a1 是数组,你这样写是什么意思?
如果要想输出 a1 数组的所有元素应该这样。
for(int i=0;i<a1.length();i++)
{
System.out.print(a