2015-11-02 61 views
1

我在IDE(JAVA NetBeans)上出現警告,運行時出錯,我不明白我在做什麼錯誤。本地隱藏變量字段和空指針異常

該警告是關於一個局部變量的隱藏字段,我只是想創建一個65536位的布爾數組。

public class Main 
{ 
    private static boolean[] BusyDevices ; 

    /* main entry point */ 
    public static void main(String argv[]) 
    { 

     boolean BusyDevices[]=new boolean[65536];//<-Here the warning 

    } 

    public static boolean isDeviceBusy(String deviceIDx) 
    { 
     if(deviceIDx.length()>4 || deviceIDx.length()<4) 
     { 
      return false; 
     } 

     try 
     { 
      return BusyDevices[Integer.parseInt(deviceIDx, 16)]; 
     } 
     catch(Exception e)    
     { 
      Print.logException("Error deviceIDx:" + deviceIDx, e);   
      return false; 
     }  
    }  
} 

我認爲我在調整布爾數組的大小時做錯了什麼;或者可以是轉換錯誤? 另外我需要開始所有位在假狀態,這是默認狀態吧?

+3

您正在創建一個與您的類級別變量同名的新本地變量。從main()方法中刪除第一個'boolean'。是的,該數組將被初始化爲全部「假」。 – Kayaman

回答

2

您有兩個名稱相同的變量BusyDevices,因爲此問題正在發生,因爲類級別變量與main方法變量衝突。

嘗試在下面的線改變變量名:

boolean BusyDevices[]=new boolean[65536];//<-Here the warning 

BusyDevices=new boolean[65536];//No duplicate variable now, variable type declation is not required 
+0

我不想要兩個同名的變量,我只想初始化一個65536位的布爾數組。 –

+0

更新了必要更改的代碼 –

1

這裏您聲明稱爲類Main的靜態字段BusyDevices

private static boolean[] BusyDevices ; 

這裏你在靜態方法中聲明一個具有相同名字的本地變量類Main

boolean BusyDevices[]=new boolean[65536]; 

main在這種情況下,局部變量聲明優先,「隱藏」或「陰影」之類的

你可能預期的領域做到這一點,初始化場(而不是本地變量)

BusyDevices = new boolean[65536]; 
+0

是的,這就是我想要的,謝謝。 parseint可以嗎?我將發送四位數字的十六進制數字。 –

+0

是的,它是正確的(最大值= 0xFFFF = 65535)。 –