0

arr内部クラスメソッド内から変数にアクセスしたいMyMethod。そこから印刷しようとすると、nullポインタ例外が発生します。

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

さて、あなたのメインメソッドの初心者にとって、あなたはあなたのクラスのインスタンスを決して作成しません。

また、オブジェクト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 = newString[n.length];を実行します。

于 2013-01-24T20:06:47.550 に答える