12 回答

TA贡献1828条经验 获得超3个赞
NullPointerException
s是当您尝试使用指向内存中没有位置的引用(null)时发生的异常,就好像它引用了一个对象一样。在空引用上调用方法或尝试访问空引用的字段将触发a NullPointerException
。这些是最常见的,但NullPointerException
javadoc页面上列出了其他方式。
可能是我能想出的最快的示例代码来说明NullPointerException
:
public class Example { public static void main(String[] args) { Object obj = null; obj.hashCode(); }}
在内线的第一行main
,我明确地将Object
引用设置为obj
等于null
。这意味着我有一个引用,但它没有指向任何对象。之后,我尝试将引用视为通过调用其上的方法指向对象。这导致a NullPointerException
因为没有代码在引用指向的位置执行。
(这是一个技术性问题,但我认为值得一提的是:指向null的引用与指向无效内存位置的C指针不同。空指针实际上并不指向任何位置,这与指向恰好无效的位置。)

TA贡献1921条经验 获得超9个赞
这就像你试图访问一个对象null
。考虑下面的例子:
TypeA objA;
此时您刚刚声明了此对象但未初始化或实例化。每当你试图访问其中的任何属性或方法时,它都会抛出NullPointerException
有意义的东西。
请参阅以下示例:
String a = null;System.out.println(a.toString()); // NullPointerException will be thrown

TA贡献1862条经验 获得超7个赞
一个null
指针是一个指向无处。当你解引用一个指针p
,你说“给我的数据在存储中的位置‘P’,当p
是一个null
指针,该位置存储在p
就是nowhere
,你说‘给我的数据在位置‘无处’。’显然,它不能这样做,所以它抛出一个null pointer exception
。
一般来说,这是因为某些东西尚未正确初始化。

TA贡献1804条经验 获得超3个赞
已经有很多解释来解释它是如何发生的以及如何解决它,但你也应该遵循最佳实践来避免它NullPointerException
。
另请参阅: 最佳实践列表
我想补充一点,非常重要的是,要好好利用final
修饰语。 在Java中适用时使用“final”修饰符
摘要:
使用
final
修饰符强制执行良好的初始化。避免在方法中返回null,例如在适用时返回空集合。
使用注释
@NotNull
和@Nullable
快速失败并使用断言来避免null对象在不应为null时在整个应用程序中传播。
首先使用equals与已知对象:
if("knownObject".equals(unknownObject)
喜欢
valueOf()
toString()。使用null安全
StringUtils
方法StringUtils.isEmpty(null)
。

TA贡献1827条经验 获得超4个赞
NullPointerException
当一个声明一个对象数组时,会发生另一次出现,然后立即尝试取消引用它内部的元素。
String[] phrases = new String[10];String keyPhrase = "Bird";for(String phrase : phrases) { System.out.println(phrase.equals(keyPhrase));}
如果比较顺序颠倒,可以避免这种特殊的NPE; 即,.equals
在有保证的非null对象上使用。
数组内的所有元素都被初始化为它们的公共初始值 ; 对于任何类型的对象数组,这意味着所有元素都是null
。
你必须初始化数组中的元素之前访问或提领他们。
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};String keyPhrase = "Bird";for(String phrase : phrases) { System.out.println(phrase.equals(keyPhrase));}
添加回答
举报