JAVA中一个类包含String数组怎么初始化的?

我编写了一个类A,然后类B中包含类A的数组,在创建类B的变量时,必须要对类B中的类A数组的每个元素进行初始化才可以使用,但是对一个包含String数组的类C,在创建类C的... 我编写了一个类A,然后类B中包含类A的数组,在创建类B的变量时,必须要对类B中的类A数组的每个元素进行初始化才可以使用,但是对一个包含String数组的类C,在创建类C的变量时,即使不对类C中String数组的每个元素初始化依然可以使用,这是为什么?
具体大概是这样的:
//类A
public class A {
int a = 0;
}
//类B
public class B {
A[] as = new A[5];
public B() {
for(int i = 0;i < 5;i++){
as[i] = new A(); //*
as[i].a = i;
}
}
}
//类C
public class C {
String[] s = new String[5];
}
//主程序
public class test {
public static void main(String[] args) {
B b = new B();
b.as[1].a = 3;

C c = new C();
c.s[1] = "3";
}
}
在类B中如果去掉了带*号的一行就会出现异常(NullPointerException);而类C中则不用new String。
我看了下String的定义,没弄明白,我想知道是怎么做到的,我希望可以写到类A中,可以不用写*号那一行
展开
 我来答
百度网友a47f6080e
2013-08-21 · TA获得超过458个赞
知道小有建树答主
回答量:127
采纳率:100%
帮助的人:122万
展开全部
不可以滴!!
因为在B中,如果没有了带*的那一行,那么仅仅只是代表 有存在一个存放A类型数组:as[i],但是里面每个元素到底存放什么我们是不知道的,在JAVA里面,就是引用为空的意思,既as[i] = null。就是说里面其实是没有任何东西的,仅仅只有一个定义而已,那怎么可以指向A类里面的a属性呢?因为as[i]指向的东西都为空,空就是代表没有任何东西,那么里面自然也不会有a这个属性咯。所以我们在声明完数组的时候,必须把数组里面的元素也申明了。但是为什么C可以呢。
你看C是这样做的:
C先声明了一个数组,所以只要存在C的实例,就可以使用到这个数组。虽然这时候,数组里面的元素是为空的,但是你在主程序里面使用了c.s[1]="3",意思就是为c实例里面的数组的第2个元素给申明了,而不是直接引用,这与B是不同的。
——————————————————————————————————————————————————————
B-->不为空,所以可以使用B里面的元素,既as数组,但是as数组里面的元素是空的,所以不存在里面有某种属性的说法,自然是不可是使用A类里面的元素a咯。
C--》不为空,所以可以使用C里面的元素s数组,然后对s数组进行操作。
祝你好运!!希望你能够理解
xiaobai_fb
2013-08-21 · 超过31用户采纳过TA的回答
知道答主
回答量:88
采纳率:0%
帮助的人:65.4万
展开全部
半天没弄明白你说的意思,但是我猜跟一个知识点有关:类的变量可以不用初始化,但是方法的局部变量必须要初始化的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-21
展开全部
as[i] = new A() ; A 是类,是要初始化的。String是简单类型,不需要new。
追问
String的定义是一个类啊
追答
是类,不一样的类。

还有 int floag double boolean 等,都不需要实例化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
如梦★初醒℃
2013-08-21 · TA获得超过346个赞
知道小有建树答主
回答量:293
采纳率:66%
帮助的人:183万
展开全部
仔细对比下这两句话:b.as[1].a = 3; c.s[1] = "3";
一个有两个点,一个只有一个点。

第二句来说,只要new了c这个对象,就会有了s[i],即使s[i]没有指向任何东西,
但是第一句,new了b对象后,同样道理你引用as[i]是可以的,但是问题是你的as[i]没有指向任何东西,所以你再又引用as[i]的a这个属性,肯定就不行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
截竹为萧
2013-08-21 · TA获得超过155个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:197万
展开全部
A[] as = new A[5]; 创建一个数组,其中每个元素为A对象。由于a变量是A类中的成员变量,其他类中想访问a,必须通过new A对象的构造子来创建引用( as[i] = new A();),然后才能 将i赋值给A对象(as[i].a = i;);
String[] s = new String[5]; 是创建一个字符串数组,他属C对象的成员变量, C c = new C();以经new了C的构造子,当然可以给成员变量赋值( c.s[1] = "3";)。

想要去掉B类中带*号的 只要将 a变量设置成static 就可以 static int a=0; 静态变量 可以直接用类名字调用 ,不需要先new。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式