从内部类访问变量 - 获取空指针异常

时间:2013-01-24 19:59:41

标签: java inner-classes

我想从内部类方法arr中访问MyMethod变量。当我尝试从那里打印时,我最终得到一个空指针异常。

public class MyClass{
    String[] arr;
    MyClass my;

    public MyClass(){
      my = new MyClass();
    }

     public class MyInner {
        public void MyMethod() {
            // I need to access 'my.arr' from here how can i do it. 
         }

       }

     public static void main(String[] args) {
       String[] n={"ddd","f"};

       my.arr=n;
     }
}

4 个答案:

答案 0 :(得分:3)

您只能使用arr。但是,在您将其设置为某个内容之前,它将为null

BTW:你的my = new MyClass()会爆炸,因为它会在堆栈溢出之前创建对象。

答案 1 :(得分:1)

您尚未初始化它,因此引用为null。例如,在构造函数中初始化它,您将可以通过内部类访问该变量。

public class MyClass {
    String[] arr;

    public MyClass (String[] a_arr) {
        arr = a_arr;
    }

    public class MyInner {
        public void MyMethod () {
            // I need to access 'my.arr' from here how can i do it. 
        }

    }

    public static void main (String[] args) {
        String[] n= {"ddd","f"};
        MyClass myClass = new MyClass (n);
    }
}

答案 2 :(得分:0)

好吧,对于主方法的初学者,你永远不会创建你的类的实例。

此外,MyClass引用了MyClass个对象。在MyClass的构造函数中,它通过调用它自己的构造函数来初始化该引用。这是一个无休止的循环。

答案 3 :(得分:0)

执行以下操作。你的初始化方式是错误的。

public class MyClass{
    String[] arr;
    MyClass my;

    public MyClass(){
    }

     public class MyInner {
        public void MyMethod() {
            // I need to access 'my.arr' from here how can i do it. 
         }

       }

     public static void main(String[] args) {
       String[] n={"ddd","f"};
       MyClass my=new MyClass();
String[] b = new String[2];

System.arraycopy( n, 0, b, 0, n.length );
     }
}

如果超过2个字符串,只需执行String [] b = new String [n.length];