猿问

什么是空指针异常,我该如何解决?

什么是空指针异常(java.lang.NullPointerException)以及它们的原因是什么?

可以使用哪些方法/工具来确定原因,以便停止异常导致程序过早终止?


长风秋雁
浏览 6711回答 12
12回答

子衿沉夜

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

郎朗坤

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

牧羊人nacy

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

狐的传说

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

GCT1015

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));}
随时随地看视频慕课网APP

相关分类

Java
我要回答