public class Array1
{   int[] a;
    public void printt(){
     int[] a=new int[]{1,2,3};
     for(int x=0;x<a.length;x++)
     System.out.println("seconddb create:"+a[x]);
    }
    
public static void main(String[] args)
{
Array1 a2=new Array1();
a2.printt();
System.out.println("OK !!!");
}
}
------------------正确-----的写法-----
public class Array1
{   int[] a;
   Array1(){
int[] a=new int[]{1,2,3};  
   }
    public void printt(){
    
     for(int x=0;x<a.length;x++)
     System.out.println("seconddb create:"+a[x]);
    }
    
public static void main(String[] args)
{
Array1 a2=new Array1();
a2.printt();
System.out.println("OK !!!");
}
}
--------错误的写法-------------
----------------------------------请问为什么这样写是错误的!

解决方案 »

  1.   

     Array1(){ 
    int[]   a=new   int[]{1,2,3};     
          }这部分是在构造方法里定义了一个局部变量叫a,这个不是类变量a,所以print方法里的a是空值
      

  2.   

    因为printt()里的变量a,
    是类变量a,
    而Array1() {
    int[] a = new int[] { 1, 2, 3 };
    }里的a是在局部定义的变量a,它的生存周期只在这个方法体里,
    两个a并非同一个,所以java.lang.NullPointerException;
      

  3.   

    public   class   Array1 
    {       int[]   a; 
          Array1(){ 
    int[]   a=new   int[]{1,2,3};   //把这里的int[]去掉  
          } 
            public   void   printt(){ 
            
            for(int   x=0;x <a.length;x++) 
            System.out.println("seconddb   create:"+a[x]); 
            } 
            
    public   static   void   main(String[]   args) 

    Array1   a2=new   Array1(); 
    a2.printt(); 
    System.out.println("OK   !!!");