首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在null引用上调用(静态)方法不会抛出NullPointerException?

在Java中,当我们在一个null引用上调用(静态)方法时,不会抛出NullPointerException的原因是因为静态方法是与类关联的,而不是与对象关联的。

当我们调用一个静态方法时,不需要创建对象实例,而是直接通过类名来调用。因此,即使引用为null,也不会影响静态方法的调用。

在Java中,NullPointerException通常发生在以下情况下:当我们在一个null引用上调用实例方法、访问实例变量或者使用null引用进行自动拆箱时,都有可能抛出NullPointerException。这是因为这些操作需要通过对象实例来进行,而null引用没有实例,因此会抛出异常。

总结起来,当我们在null引用上调用(静态)方法时,不会抛出NullPointerException的原因是静态方法与类关联,不需要对象实例来调用。而NullPointerException通常发生在需要对象实例的操作上。

相关搜索:hibernate在调用query.list方法时抛出NullPointerException在null引用上调用扩展函数时没有NullPointerException颤动窗体控制器抛出“方法'validate‘在null上被调用”NullPointerException:尝试对null对象引用调用虚方法“long java.util.Date.getTime()”NullPointerException:尝试对null对象引用调用接口方法“boolean java.util.Collection.isEmpty()”Android:NullPointerException:尝试在空对象引用[duplicate]上调用接口方法rcp目标: java.lang.NullPointerException:无法在null上调用方法isEmpty()NullPointerException:尝试对null对象引用调用虚方法的空android.widget.ImageView.setImageResource(int)‘在某些设备上对null调用了方法'+‘java.lang.NullPointerException:尝试对null对象引用调用虚方法“int org.json.JSONArray.length()”java.lang.NullPointerException:尝试对null对象引用调用虚拟方法“boolean android.view.WindowInsets.isConsumed()”java.lang.NullPointerException:尝试对null对象引用调用接口方法“int android.database.Cursor.getCount()”jumpToPage方法在null上被调用时出现颤动Dart/Flutter//“方法'toDate‘在null上被调用。接收者: null尝试调用: toDate()”为什么每次在SpringMVC服务中调用简单的方法都比调用静态方法慢?我的应用程序在null上调用了抛出我的方法我可以在静态方法中获得对调用类的引用吗?显示方法'[]‘的颤动在null上被调用。浅谈Listbuilder在结构类型上找到静态方法后,如何调用它为什么方法的`this`在调用对象方法的引用时会改变?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java中有关Null的9问题

就像你在这里看到的这样,我将myObj定义为静态引用,所以我可以方法里直接使用它。注意主方法静态方法,不可使用非静态变量。...) null; // yes it's possible, no error 你可以看到在编译和运行时期,将null强制转换成任何引用类型都是可行的,在运行时期都不会抛出空指针异常。...它将会抛出空指针异常,但是你可能不知道,你可以使用静态方法来使用一个值为null引用类型变量。因为静态方法使用静态绑定,不会抛出空指针异常。...从编译角度来看这是可以的,但结果完全取决于方法Null安全的方法,如在这个例子中的print方法不会抛出空指针异常,只是优雅的退出。如果业务逻辑允许的话,推荐使用null安全的方法。...总而言之,记住,null是任何一个引用类型变量的默认值,java中你不能使用null引用调用任何的instance方法或者instance变量。

1.2K50
  • Java中有关Null的9件事

    就像你在这里看到的这样,我将myObj定义为静态引用,所以我可以方法里直接使用它。注意主方法静态方法,不可使用非静态变量。...= (Double) null; // yes it's possible, no error 你可以看到在编译和运行时期,将null强制转换成任何引用类型都是可行的,在运行时期都不会抛出空指针异常...它将会抛出空指针异常,但是你可能不知道,你可以使用静态方法来使用一个值为null引用类型变量。因为静态方法使用静态绑定,不会抛出空指针异常。...从编译角度来看这是可以的,但结果完全取决于方法Null安全的方法,如在这个例子中的print方法不会抛出空指针异常,只是优雅的退出。如果业务逻辑允许的话,推荐使用null安全的方法。...总而言之,记住,null是任何一个引用类型变量的默认值,java中你不能使用null引用调用任何的instance方法或者instance变量。

    67520

    Java中有关Null的9件事

    就像你在这里看到的这样,我将myObj定义为静态引用,所以我可以方法里直接使用它。注意主方法静态方法,不可使用非静态变量。...它将会抛出空指针异常,但是你可能不知道,你可以使用静态方法来使用一个值为null引用类型变量。因为静态方法使用静态绑定,不会抛出空指针异常。...,这时方法可以接收任何引用类型,例如public void print(Object obj)可以这样调用print(null)。...从编译角度来看这是可以的,但结果完全取决于方法Null安全的方法,如在这个例子中的print方法不会抛出空指针异常,只是优雅的退出。如果业务逻辑允许的话,推荐使用null安全的方法。...总而言之,记住,null是任何一个引用类型变量的默认值,java中你不能使用null引用调用任何的instance方法或者 instance变量。

    56920

    懵逼...

    为什么 return null 的时候,程序不会抛出 NPE 呢? 好像有千言万语,又不知从何说起。 我把它归结到常识问题这一类,要对一个常识问题进行解释,还真的不太好组织语言。...它安安静静的待在某个地方(局部变量、成员字段、静态字段)不会有任何问题;它从一个地方被搬运到另一个地方也不会有任何问题(变量赋值、返回值等)。...唯一会因为null值而引起NullPointerException的动作是“解引用”(dereference)——也就是通过这个引用要对其引用的对象做操作。...这是因为getClass()是java.lang.Object类方法,因而无论什么引用类型都可以使用。这在Java源码层面和在Java字节码层面上都是最短的。...于是我去看了一下 obj.getClass() 方法调用处,还真是有这样的操作。

    31120

    Java 8中 Optional 类源码实现与分析

    开发过程中,经常需要对 null 进行判断和处理,如果漏掉了,就会引发 NullPointerException 异常,因此 null 判断几乎会遍布代码的每个角落,那么神奇的 null 是如何诞生的呢...1965年,英国一位名为Tony Hoare的计算机科学家设计ALGOL W语言时提出了null引用的想法。ALGOL W是第一批堆上分配记录的类型语言之一。...(引自网络)其实, null 引入的目的是为了表示变量值的缺失。 那么Java 8 中为什么会引入这样的一个 Optional 类呢?...可以通过以下的三个方法: empty() :通过静态工厂方法创建一个空的 Optional 实例; of() :将指定值用 Optional 封装之后返回,如果该值为 null ,则抛出一个 NullPointerException...empty() 方法,将会直接返回静态常量 EMPTY . (2)of() of() 方法将指定值用 Optional 封装之后返回,如果该值为 null ,则抛出一个 NullPointerException

    8310

    啃透JDK源码系列-Arrays核心源码解析

    如果指定的数组引用null,则除非另有说明,否则此类中的方法抛出NullPointerException。 此类中所包含方法的文档包括对实现的简要说明。 此类描述应被视为实现的说明,而不是标准。...的拷贝方法,实际最终调用的还是 System.arraycopy 这个本地方法。...如果dest为null,则抛出NullPointerException。 如果src为null,则抛出NullPointerException,并且不修改目标数组。...注意此处的Arrays.toString()方法是Arrays类自己定义实现的静态方法,而不是Object的toString()方法。...一般来说,hashCode方法只计算到数组的第一层,如果数组中还内嵌数组,deepHashCode方法则会一直递归调用到数组无法再拆分为止。

    44231

    Java 中关于 Null 的这些事儿你知道吗

    就像你在这里看到的这样,我将 value 定义为静态引用,还有一个静态方法,我可以 main 函数中直接使用它。...= " + string); } 你可以看到在编译期和运行期内,将null 转换成任何的引用类型都是可行的,并且不会抛出空指针异常 null 只能赋值给引用变量,不能赋值给基本类型变量。...持有 null 的包装类进行自动拆箱的时候,不能完成转换,会抛出空指针异常,并且 null 也不能和基本数据类型进行对比 public static void main(String[] args)...null 调用静态方法不会抛出 NullPointerException。...,使用String.value(number) 静态方法没有抛出空指针异常,但是使用 toString()却抛出了空指针异常。

    72630

    避开NullPointerException的10条建议

    虽然看起来是个小错误,但带来的影响却不小,Tony Hoare(null 引用的发明者) 2009 年说过 NPE 大约给企业造成数十亿美元的损失。在这工作半年内,我就踩了好几次 NPE 的坑。...概述的 6 个可能发生情况: 空对象上调用实例方法。...对空对象调用静态方法或类方法时,不会报 NPE,因为静态方法不需要实例来调用任何方法; 访问或更改空对象的任何变量或字段时; 抛出异常时抛出 null; 数组为 null 时,访问数组长度; 数组为...,避免返回 null,而应是空集合或空数组 返回空集合或空数组时,可以保证调用方法(如 size()、 length())不会出现 NPE。...这样的链式调用不会抛出 NPE。最后返回后,用户只需检查结果是否为 MissingNode 就能判断是不是找到了。

    2.1K30

    java.lang.NullPointerException出现的几种原因及解决方案

    这里的代码将不会被触发,因为会抛出 java.lang.NullPointerException 异常。...如果你的对象的引用等于 nullNullPointerException 则会抛出,使用静态 String.valueOf 方法,该方法不会抛出任 何异常并打印 "null" 6、class...被声明了类型,默认 class = null 这样调用 class 中方法的时候系统只能给你个空指针异常, 给其实例化就好了: class = new Class(); 7、返回null方法的返回值不要定义成为一般的类型...其意指可能会在运行的时候才会被抛出,一个变量是null及只有其名,没有实值内容,也没分配内存,当你要去取他的长度对他进行操作就会出现NullPointException.所以声明变量时最好给它分配好内存空间...,尽量避免返回null方法的返回值不要定义成为一般的类型,用数组。

    1.6K31

    ​JDK1.8 新特性 (八):还在重复写空指针检查代码?​

    这是1965年发明空引用的结果……这导致了无数的错误,漏洞和系统崩溃,最近40年中可能造成十亿美元的痛苦和破坏。”...令人兴奋的是,JDK1.8引入了一个新类java.util.Optional,凭借Optional类提供的API,我们再也不用担心NullPointerException了,更不会再去写那些烦人的判断啦...Optional.empty()方法是一个静态工厂方法,它返回Optional类的特定单一实例。 Optional,本质是一个容器对象,拥有一个非空值或空值,需要我们将对象实例传入该容器中。...Optional提供的创建方法如下: Optional.of(obj):如果对象为 null,将会抛出NullPointerException。...为了以一种安全的方式进行这些操作,你首先需要判断people对象是否为null,再调用它的方法getName,如下所示: if (null !

    1.6K20

    java.lang.NullPointerException出现的几种原因以及解决

    4、字符串与文字的比较,文字可以是一个字符串或Enum的元素,如下会出现异常 String str = null; if(str.equals(“Test”)){ //这里的代码将不会被触发,...因为会抛出java.lang.NullPointerException异常。...如果你的对象的引用等于nullNullPointerException则会抛出,使用静态String.valueOf方法,该方法不会抛出任何异常并打印”null” 6、class被声明了类型, 默认...class = null; 这样调用class中方法的时候系统只能给你个空指针异常, 给其实例化就好了:class = new Class(); 7、返回null方法的返回值不要定义成为一般的类型...这样如果想要返回null的时候就能避免许多不必要的NullPointerException 总之,NullPointerException由RuntimeException派生出来,是一个运行时异常

    4.6K20

    Java 1.8的主要新特性与实战

    方法引用(Method References):方法引用提供了一种引用方法而不执行方法的方式,它与lambda表达式相关。...之前版本的Java中,null经常被用来表示一个值不存在,但这种方式容易出错因为如果你调用了一个不存在的对象的方法,会抛出NullPointerException。...(System.out::println); // 这行不会打印任何东西,也不会抛出NullPointerException5....接口的默认方法静态方法是什么?Java 8之前,接口只能有抽象方法。Java 8允许接口中添加默认方法静态方法。默认方法允许接口中添加有具体实现的方法,而不需要实现类去实现这个方法。...静态方法则是属于接口的,不需要通过对象来调用

    39521

    Java 8 - Optional全解

    所以调用 getCar 方法的结果会怎样呢?在实践中,一种比较常见的做法是返回一个 null 引用,表示该值的缺失,即用户没有车。...而接下来,对 getInsurance 的调用会返回 null 引用的 insurance ,这会导致运行时出现一个 NullPointerException ,终止程序的运行。但这还不是全部。...下面这个例子是我们试图方法中避免 NullPointerException 的第一次尝试 ?...这个方法每次引用一个变量都会做一次 null 检查,如果引用的任何一个遍历的解变量 值为 null ,它就返回一个值为“Unknown”的字符串。...不过get 方法遇到空的 Optional 对象时也会抛出异常,所以不按照约定的方式使用它,又会让我们再度陷入由 null 引起的代码维护的梦魇。

    50922

    【小家java】对java中null、void、Void的理解学习

    一般人可能不会留意,但此文通过一些简单的例子,希望可以加深同学们对他哥几个的了解 2、栗子 关于null,估计很多人可能恨透它了,因为它是NullPointerException的罪魁祸首。...第二个,我们想到m的值肯定为null啊,为什么调用doSomething没有空指针呢?...所以对静态方法调用这里奉送两句话,记住就行: 所引用对象是否为null无关紧要,因为访问静态方法不需要实例对象。 如果引用不为null,运行时对象类型也无关紧要,因为静态调用不会导致动态调用分派。...因此,静态方法的访问,不建议用实例调用,反而让语意变得晦涩了。...最后提一点,java中的自动拆装箱的过程中,如果遇到null值,处理的时候需要当心: 任何含有null值的包装类Java拆箱生成基本数据类型时候都会抛出一个空指针异常 在看下面例子,判断null

    2.2K40

    NullPointerException 的处理新方式,Java14 实在太香!

    .getCity(); 链式调用的过程中,如果employee, getDetailInfos(),或者 getRegistryAddress() 为空,JVM就会抛出 NullPointerException...本质,JEP 358 旨在通过描述某个变量是 “null” 来提高 JVM 生成的 “NullPointerException” 的可读性。...JEP 358通过方法、文件名和行号旁边描述为 null 的变量,带来了一个详细的 NullPointerException 消息。它通过分析程序的字节码指令来工作。...value of "getEmailAddress()" is null 为了生成异常消息,JEP 358 重构了将空引用推送到操作数堆栈的部分源代码。...首先,只有当JVM本身抛出一个 NullPointerException 时,才会进行详细的消息计算,如果我们Java代码中显式抛出异常,则不会执行计算。

    55320

    Java14 处理 NullPointerException 新方式,真的太香了!

    .getCity(); 链式调用的过程中,如果 employee, getDetailInfos(),或者 getRegistryAddress() 为空,JVM就会抛出 NullPointerException...本质,JEP 358 旨在通过描述某个变量是 “null” 来提高 JVM 生成的 “NullPointerException” 的可读性。...JEP 358通过方法、文件名和行号旁边描述为 null 的变量,带来了一个详细的 NullPointerException 消息。它通过分析程序的字节码指令来工作。...三.技术方面 现在我们已经很好地理解了如何使用增强的NullPointerException标识 null 引用,让我们来看看它的一些技术方面。...首先,只有当JVM本身抛出一个 NullPointerException 时,才会进行详细的消息计算,如果我们Java代码中显式抛出异常,则不会执行计算。

    18910

    这几天研究了一下JDK14,发现它处理NPE的方式,真香!

    .getCity(); 链式调用的过程中,如果employee, getDetailInfos(),或者 getRegistryAddress() 为空,JVM就会抛出 NullPointerException...本质,JEP 358 旨在通过描述某个变量是 “null” 来提高 JVM 生成的 “NullPointerException” 的可读性。...JEP 358通过方法、文件名和行号旁边描述为 null 的变量,带来了一个详细的 NullPointerException 消息。它通过分析程序的字节码指令来工作。... value of "getEmailAddress()" is null 为了生成异常消息,JEP 358 重构了将空引用推送到操作数堆栈的部分源代码。...首先,只有当JVM本身抛出一个 NullPointerException 时,才会进行详细的消息计算,如果我们Java代码中显式抛出异常,则不会执行计算。

    44610

    Java 14 :NullPointerException的处理新方式

    .getCity(); 链式调用的过程中,如果employee, getDetailInfos(),或者 getRegistryAddress() 为空,JVM就会抛出 NullPointerException...本质,JEP 358 旨在通过描述某个变量是 “null” 来提高 JVM 生成的 “NullPointerException” 的可读性。...JEP 358通过方法、文件名和行号旁边描述为 null 的变量,带来了一个详细的 NullPointerException 消息。它通过分析程序的字节码指令来工作。...value of "getEmailAddress()" is null 为了生成异常消息,JEP 358 重构了将空引用推送到操作数堆栈的部分源代码。...首先,只有当JVM本身抛出一个 NullPointerException 时,才会进行详细的消息计算,如果我们Java代码中显式抛出异常,则不会执行计算。

    1.1K30
    领券