本地隐藏变量字段和空指针异常

时间:2015-11-02 18:14:56

标签: java nullpointerexception

我在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;
        }       
    }     
}

我认为在调整布尔数组大小时我做错了;或者可能是转换错误? 另外我需要从处于假状态的所有位开始,这是默认状态吗?。

2 个答案:

答案 0 :(得分:2)

您有两个同名BusyDevices的变量,因为这个问题正在发生,因为类级别变量与main方法变量冲突。

尝试更改以下行中的变量名称:

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

as

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

答案 1 :(得分:1)

您要在此处声明名为Main

的班级BusyDevices的静态字段
private static boolean[] BusyDevices ;

您在此处声明类main的静态方法Main中具有相同名称的局部变量

boolean BusyDevices[]=new boolean[65536];

在这种情况下,局部变量声明优先,&#34;隐藏&#34;或者&#34;阴影&#34;班级的领域

您可能打算这样做,以初始化字段(而不是局部变量)

BusyDevices = new boolean[65536];