java - 为什么在 Java 中使用数组时会出现 NullPointerException?

标签 java exception pointers null

public static byte[] main_Mem = new byte[2048];
public static SlotNode[] cache = new SlotNode[8];

这不会创建对象的实例吗?为什么我会获得 NPE?

 //initialize main memory
           for (int i = 0; i<main_Mem.length; i++) {
                   main_Mem[i] = (byte) (0xFF & i);
                   System.out.printf("%X", 0xFF & i);
                   System.out.print("      " + i);
                   System.out.println(" ");

           }

           //initialize cache slots to 0
           for (int i = 0; i<cache.length; i++) {
                   cache[i].setValidBit(0);
                   cache[i].setTag(0);
                   cache[i].setData(0);
                   cache[i].setDirty(0);
           }

最佳答案

您需要初始化SlotNode,例如:

   for (int i = 0; i<cache.length; i++) {
           cache[i] = new SlotNode(...); // Add the constructor parameters as needed
           cache[i].setValidBit(0);
           cache[i].setTag(0);
           cache[i].setData(0);
           cache[i].setDirty(0);
   }

通过这样做:

public static SlotNode[] cache = new SlotNode[8];

您只需初始化 8 个 SlotNode 实例的数组 - 您需要单独初始化每个实例。

关于java - 为什么在 Java 中使用数组时会出现 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9509331/

相关文章:

java - 在hadoop java中解析json输入

java - Eclipse 中 Spring @Autowired 的 FindBugs null 问题

java - 如何让 JSplitPane 平滑移动?

c# - 为什么 Visual Studio 不强制执行 try-catch-block 实现?

c# - NUnit:为什么 Assert.Throws<T> 没有捕获我的 ArgumentNullException?

java - 在 UIThread 上运行并发布查看,仍然得到 CalledFromWrongThreadException

java - 如何设置 JPanel 中 GeneralPath 的位置?

指向 if 语句中变量的 C++ 指针

c - 我们如何找到以下 C 程序的输出?

c - C中指针、变量和值的内存位置?