2015-11-02 44 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)。 –