我在堆栈中有一个字符串,例如"at 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
Run Code Online (Sandbox Code Playgroud)
Mic*_*rry 21
它是编译器为处理内部类而生成的合成方法.Java字节码没有内部类的概念,所以当它被编译时,它会执行各种技巧,以便在运行时"伪造"它们的存在.在这种特定情况下,access$XXX该类方法通常与从内部类提供对外部类的引用相关联.这种合成实体就是这种情况的标志.(您通常可以通过类/方法名称中的美元来识别它们.)
为什么1400这么大?
它是一个纯粹的任意标识符,只有编译器需要知道(并因此选择).只要它在应用程序中是唯一的,它可以是任何东西(从技术上讲,它甚至不必是一个数字.)
至于问题所在,看一下最顶层堆栈跟踪给出的行:ATable.java:181.
| 归档时间: |
|
| 查看次数: |
3937 次 |
| 最近记录: |