2016-10-02 46 views
0

我想加倍在非靜態上下文通過以下方式數組:問題與變量初始化時的非靜態

public class Test { 
    int[] data=new int[1]; 

    public void Double(){ 
     if(data == null){ 
      int[] data=new int[1]; 
     } 
     int[] data=new int[data.length*2]; 
    } 

    public static void main(String[] args){ 
     Test table = new Test(); 
     table.data=new int[1]; 
    } 
} 

,因爲它警告我說,

使用javac不會編譯

可變數據可能尚未初始化

即使它顯然已經初始化,我怎麼能解決這個問題?

回答

2

您在Double()方法(實際上是聲明瞭兩個這樣的變量)中聲明瞭一個本地data變量,它隱藏了具有相同名稱的實例變量。

因此,在聲明中:

int[] data=new int[data.length*2]; 

當地data變量之前,您正在訪問data.length被初始化。

將其更改爲:

public void Double(){ 
    if(data == null){ 
     data=new int[1]; 
    } else { 
     data=new int[data.length*2]; 
    } 
} 
+0

對不起,讀得太表面,並試圖找到在湯裏飛。 –

+0

@Eran它應該被稱爲'Test'。 'double'是關鍵字,因此不是標識符,因此不是合法的方法名稱。 – EJP

+0

@EJP我沒想過。然而,由於這個方法的目的是將成員數組的長度加倍,所以'doubleArray()'可能會更好。用類名調用它也會令人困惑,因爲它不是構造函數。 – Eran

0

你的代碼是完全沒有意義的。 data在你測試的時候不可能爲null,下面這一行你聲明和初始化一個超出範圍的局部變量立即是沒有意義的,所以所有相關的代碼都可以被刪除。