if (methodCall.getClassName(cg.getConstantPool()).contains(ALLATORI_CLASS.getClassName())) {
我试图修复一个java应用程序,并且我一直得到一个空指针异常。究竟是什么?我将如何修复这行代码?
答案 0 :(得分:4)
Java允许对象引用为null
,这意味着引用不是指真实对象。
您通常使用对象引用的方式与null
无关:
关于使用null
值唯一可以做的事情是检查它是null
还是名义类型(通过instanceof
)。
当您尝试使用上述NullPointerException
的引用时,会出现null
- 调用或操纵字段。
通常会出现问题,因为您尝试使用引用之前它已被填充,因此您经常需要查找乱序的操作。您可能会尝试识别创建您尝试使用的任何内容的代码,并在使用它之前查看它未运行的原因。
如果引用的类型是interface
类型,通常可以实现实际具有方法的类似null的值。例如,如果没有非必要的数据库驱动组件的配置,您可能只创建一个没有任何用处,但不会爆炸并阻止系统其余部分工作的组件。
在
if (methodCall.getClassName(cg.getConstantPool()) .contains(ALLATORI_CLASS.getClassName())) {
有一些地方可能会出现问题。
methodCall
可能为null,导致对getClassName
的调用失败cg
可能为null,导致对getConstantPool
的调用失败ALLATORI_CLASS
可能为null,导致对getClassName
的调用失败,这可能表示类初始化周期methodCall.getClassName(cg.getConstantPool())
可能会返回null,导致调用contains
失败我会为每一个添加日志记录,以确定哪些是问题的哪些,哪些不是问题的一部分。
Tony Hoare调用null
他的“十亿美元错误”,因为空的解除引用错误非常频繁。
我称之为十亿美元的错误。它是1965年空引用的发明。那时,我正在设计第一个用于面向对象语言(ALGOL W)的引用的综合类型系统。我的目标是确保所有引用的使用绝对安全,并由编译器自动执行检查。但是我无法抗拒引入空引用的诱惑,仅仅因为它很容易实现。这导致了无数的错误,漏洞和系统崩溃,这可能在过去四十年中造成了数十亿美元的痛苦和损害。
他实现了它,因为使语言保证指向实际值的所有指针经常给用户带来负担,并且使得在急切语言中构建循环数据类型变得棘手。
其他语言使用联合类型(如option)来解决此问题。
答案 1 :(得分:0)
“NullPointerException
”表示您的目标是“empy”,通常是因为它不存在。首先必须声明变量AND initialize。
从我所看到的,你正在调用一个代码无法访问的方法,因此Java认为你想指向“什么都没有”。首先,如果方法IS EXPECTED给出该异常(即:从用户获取字符串(直接输入),因为用户可以给出一个空条目。),向方法添加throw声明(即public void method1() throws NullPointerException {
}
但是你提供的唯一一条线我无法帮助你,抱歉。