0

我想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

4 回答 4

3

你可以只使用arr. 但是,除非您将其设置为某种东西,否则它将是null

顺便说一句:你my = new MyClass()会爆炸,因为它会创建对象,直到堆栈溢出。

于 2013-01-24T20:00:44.727 回答
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);
    }
}
于 2013-01-24T20:01:41.953 回答
0

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

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

于 2013-01-24T20:02:48.050 回答
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];

于 2013-01-24T20:06:47.550 回答