我在堆栈中有一个字符串,例如“在alexei.ATable $ IndexOfATable.access $ 1400(ATable.java:80)”

我很有趣,数字1400是多少?
内部类IndexOfATable只有3个字段,而不是1400。

有趣的是,为什么数字1400这么大?

debug:
Exception in thread "main" java.lang.NullPointerException
    at alexei.ATable$IndexOfATable.compareTwoRows(ATable.java:181)
    at alexei.ATable$IndexOfATable.access$1400(ATable.java:80)
    at alexei.ATable.updateIndex(ATable.java:501)
    at alexei.ATable.addRow(ATable.java:361)
    at learn.Base.main(Base.java:18)
Java Result: 1

最佳答案

这是编译器为了处理内部类而生成的一种综合方法。 Java字节码没有内部类的概念,因此在编译时,它会执行各种技巧以在运行时“伪造”一个内部类。在这种特定情况下,方法的access$XXX类通常与从内部类提供对外部类的引用相关联。这种合成实体就是这种迹象。 (您通常可以通过在类/方法名称中包含一美元来发现它们。)



这是一个纯粹的任意标识符,只有编译器需要知道(并选择)。只要它在应用程序中是唯一的,它就可以是任何东西(从技术上讲,它甚至不必是数字。)

至于问题所在,请看最上面堆栈跟踪给出的行:ATable.java:181

10-08 01:50