黑马程序员技术交流社区

标题: 对象数组的问题 [打印本页]

作者: 丁岩    时间: 2012-9-26 09:03
标题: 对象数组的问题
  1. package Mych1;

  2. public class test
  3. {
  4. public static void main(String[]args)
  5. {
  6. Ca ch=new Ca(5);
  7. System.out.println(ch.getretu()[0].getNum());
  8. }
  9. }


  10. class Cat
  11. {
  12. int num;
  13. Cat(int num)
  14. {
  15. this.num=num;
  16. }
  17. public int getNum()
  18. {
  19. return num;
  20. }

  21. }

  22. class Ca
  23. {
  24. Cat[]c=null;
  25. int n;
  26. Ca(int n)
  27. {
  28. this.n=n;
  29. for(int i=0;i<n;i++)
  30. {
  31. c[i]=new Cat(i+1);
  32. }
  33. }


  34. public Cat[]getretu()
  35. {
  36. return c;
  37. }

  38. }
复制代码
为什么报空指针异常呢
作者: 汪小照    时间: 2012-9-26 09:37
class test
{
  public static void main(String[]args)
  {
    Ca ch=new Ca(5);
     System.out.println(ch.getretu()[0].getNum());
  }
}

class Cat
{
int num;
Cat(int num)
{
this.num=num;
}
public int getNum()
{
return num;
}
}
class Ca
{
Cat[] c= null;
int n;
Ca(int n)
{
  this.n=n;
        c= new Cat[n];//在此处应该加上这句话,要指定数组的大小。
                //如果你不指定,数组的长度将会是0,并且c的值为空,
       //而你在下面却用到了c[0],所以程序就会出现空指针异常。
     
  for(int i=0;i<n;i++)
  {
     c=new Cat(i+1);
  }
  
}

public Cat[] getretu()
{
  return c;
}
}

1.jpg (3.11 KB, 下载次数: 14)

正确运行结果

正确运行结果

作者: 丁岩    时间: 2012-9-26 09:43
汪小照 发表于 2012-9-26 09:37
class test
{
  public static void main(String[]args)

谢谢,问题解决了

作者: 王小闲7    时间: 2012-9-26 10:28
你在类Ca里定义了成员变量 Cat[] c=null;然后在getretu()方法里返回c肯定是空的。首先在Ca(int n)的构造方法里把Cat[] 数组创建出来,然后加上这句this.c=c;创建数组有两种方法,第一就是int[] a={1,23,3};第二种就是int[] a=new int[5];但是你先把数组赋值空那肯定不对的。下面是我写的代码你可以参考,注释也写了。
  1. package com.test;

  2. public class IndexTest {

  3.         public static void main(String[] args) {
  4.                 Ca ch = new Ca(5);
  5.                 System.out.println(ch.getretu()[0].getNum());
  6.                 /*如果初始化数组的时候例如
  7.                  * int[] a=null;那么数组中的值是空;
  8.                  */
  9.                 //错误代码,这段代码会报空指针
  10.                 /*int[] a=null;
  11.                 a[0]=0;
  12.                 a[1]=1;
  13.                 for (int i = 0; i < a.length; i++) {
  14.                         System.out.println(a[i]);
  15.                 }
  16.                 */
  17.                
  18.         }
  19. }

  20. class Cat {
  21.         int num;

  22.         Cat(int num) {
  23.                 this.num = num;
  24.         }

  25.         public int getNum() {
  26.                 return num;
  27.         }

  28. }

  29. class Ca {
  30.         int n;
  31.         Cat[] c;

  32.         Ca(int n) {
  33.                 this.n = n;
  34.                 Cat[] c =new Cat[n];
  35.                 this.c=c;
  36.                 for (int i = 0; i < n; i++) {
  37.                         c[i] = new Cat(i + 1);
  38.                 }
  39.         }
  40.        
  41.        
  42.        
  43.        
  44.         public Cat[] getretu() {
  45.                 return c;
  46.         }

  47. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2