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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sd110572 金牌黑马   /  2013-12-5 22:24  /  999 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 sd110572 于 2013-12-6 09:30 编辑

在A类的对象实例化后需要对其中定义的B类实例化么?
  1. class B
  2. {
  3. int n;
  4. }
  5. class A
  6. {
  7. B[] b=new B[23];
  8. }
  9. public class Ysumap
  10. {
  11. public static void main(String args[])
  12. {
  13. A a=new A();
  14. a.b[0].n=1; //这里空指针异常
  15. }
  16. }
复制代码

此时会出现空指针异常

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

2 个回复

倒序浏览
楼主在A类中定义了成员B类型的数组,但并没有对数组进行初始化,数组中的元素默认都为null
主函数中,若要对A类中的数组进行操作,则需要先为数组赋值,此时就需要实例化B类
楼主的程序没有对数组进行赋值,所以b[0] 为null,所以回报空指针异常

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
成员变量随着对象而存在,存在于堆内存中。堆内存的特点就是其中的元素有默认隐式的初始化。引用型数据类型的默认初始化值为null。
A a=new A();在堆内存中创建A类对象,并且建立b这个变量显式初始化为B的数组。
数组new B[23];同样也是存在于堆内存中,这个数组中的每个元素都没有被显式的初始化,当然就使用默认null喽。
因此,a.b[0]会报空指针异常。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马