2013-01-24 164 views
0

我想從內部類方法MyMethod內部訪問arr變量。當我嘗試從那裏打印它時,我最終得到一個空指針異常。從內部類訪問變量 - 獲取空指針異常

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; 
    } 
} 
+0

您正在構造函數中創建一個無限的初始化循環。你基本上想做什麼? – shuangwhywhy

+0

將'= new MyClass()'移出:MyClass my = new MyClass()'。並且可能是'static' - 因爲你想用'main'方法訪問它。但畢竟,你想從一開始就做什麼? – shuangwhywhy

+0

我想訪問從內部類方法MyMethod()中聲明的'arr'。 'arr'將在'main()'方法中初始化。 –

回答

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); 
    } 
} 
+0

我如何在構造函數中初始化它? –

+0

@sharonHwk我已經根據你提供的代碼編輯了我的答案。我也糾正了彼得勞瑞提到的問題。順便說一句,他的答案也很好。 – Laf

+0

你是對的,但是,我必須在它自己的main()方法中初始化arr。我應該如何編輯代碼來做到這一點? –

3

您只能使用arr。然而,直到你將它設置爲它將是null

順便說一句:你的my = new MyClass()會炸燬,因爲它會創建對象,直到它堆棧溢出。

+0

如何在main()方法中使用arr,因爲它是靜態的 –

+0

你必須創建一個MyClass的實例。這意味着修復構造函數,使其不會炸燬。 –

+0

好的。但是接下來我將如何從MyMethod()訪問'arr'。我應該如何以及在哪裏初始化'arr'。對不起,但我是一個初學者 –

0

那麼,對於你的主要方法的初學者,你永遠不會創建你的類的實例。

另外,MyClassMyClass對象有參考。在MyClass的構造函數中,它通過調用它自己的構造函數來初始化該引用。這是一個無止境的循環。

+0

我如何在構造函數初始化它? –

+0

如果我從構造函數中刪除MyClass引用,那麼我將如何從主方法訪問數組? –

+0

主要方法: MyClass object = new MyClass(); object.arr; – Aurand

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串的情況下,只需做字符串[] B =新的String [n.length];

+0

我不能把它作爲'new String [2];',我甚至可能有超過2 –

+0

檢查我的編輯... –

+0

接受,如果它有幫助 –