当前位置: 首页 > news >正文

空指针异常的触发

 面向对象分析:

当你要吃饭,饭是对象,提供吃饭这个功能,所以饭为null时,你去调吃饭这个功能,就是去操作饭这个抽象模型,但这个模型是null,就是空指针异常了,但如果有了饭这个对象,你调吃饭这个功能,饭可以返回null呀

Byte contentType = example.getContentType(); // contentType 是 null

 

不会抛出NullPointerException的原因在于作用域和操作的性质。以下是详细的解释:


1. example对象本身不为null

首先,NullPointerException通常发生在尝试对null对象引用进行操作时。在你的代码中,example是一个对象引用,如果example本身为null,那么调用example.getContentType()会直接抛出NullPointerException。但在这个场景中,example显然不是null,否则代码无法正常执行到getContentType()方法。

java复制

Example example = new Example(); // example 不为 null
Byte contentType = example.getContentType(); // 正常调用

2. getContentType()方法的返回值为null

NullPointerException不会因为方法返回null而抛出。NullPointerException通常发生在以下几种情况:

  • 尝试对null对象引用调用方法或访问字段。

  • 尝试对null对象引用进行某些操作(如数组访问、switch语句等)。

在你的代码中,example.getContentType()返回了一个Byte类型的值,而Byte是一个包装类,它可以接受null作为有效值。因此,当getContentType()返回null时,这个null值会被正常赋值给contentType变量。

java复制

Byte contentType = example.getContentType(); // contentType 可能是 null,但不会抛出异常

3. Byte是一个包装类

Byte是一个包装类,它可以接受null值。当你将null赋值给一个Byte类型的变量时,这本身是合法的操作。因此,即使getContentType()返回null,也不会有任何问题。

java复制

Byte contentType = null; // 合法操作

4. 为什么不会抛出NullPointerException

  • example对象本身不为null:你可以正常调用它的方法。

  • getContentType()返回null是合法的Byte类型可以接受null值。

  • 赋值操作本身不会触发异常:将null赋值给一个变量是完全合法的操作,不会导致任何运行时错误。

只有当你尝试对contentType进行某些操作(如调用方法、作为switch语句的条件等)时,才会触发NullPointerException。例如:

java复制

switch (contentType) { // 如果 contentType 是 null,这里会抛出 NullPointerException
    case 1:
        System.out.println("Type 1");
        break;
}

5. 总结

NullPointerException不会因为方法返回null而抛出,而是因为对null对象引用进行非法操作才会抛出。在你的代码中:

java复制

Byte contentType = example.getContentType(); // contentType 是 null
  • example对象本身不为null,因此可以正常调用getContentType()方法。

  • getContentType()返回的null值被赋值给contentType变量,这是一个合法的操作。

  • 只有当你尝试对contentType进行某些操作(如调用方法、作为switch语句的条件等)时,才会触发NullPointerException

因此,这段代码不会抛出NullPointerException,而是正常执行并将null赋值给contentType

相关文章:

  • 论文阅读分享——UMDF(AAAI-24)
  • 用Haskell语言和wreq库配合HTTP写个爬虫程序
  • Java学习--Redis
  • vulnhub靶场【digitalworld.local系列】的electrical靶机
  • Rabbitmq--延迟消息
  • HTML星球大冒险之路线图
  • 程序设计语言基础知识概述
  • 微服务项目如何部署?
  • 程序化广告知识入门与Python基础数据处理实践
  • 【C++】 —— 笔试刷题day_1
  • RHEL/CentOS 7.9使用firewalld限制出方向策略
  • Javaweb后端文件上传@value注解
  • 操作系统之进程状态、优先级和切换与调度
  • 【C语言基础】变量与算术表达式介绍
  • SpringBoot -拦截器Interceptor、过滤器 Filter 及设置
  • SpringBoot使用Nacos进行application.yml配置管理
  • 日期类、Date、Calendar、IO 流、File
  • Uniapp实现地图获取定位功能
  • 基于muduo+mysql+jsoncpp的简易HTTPWebServer
  • linux wifi driver深度实践之内核编译加载
  • 学者三年实地调查被判AI代笔,论文AI率检测如何避免“误伤”
  • 澎湃·镜相第二届非虚构写作大赛初选入围名单公示
  • 全国人大常委会今年将初次审议检察公益诉讼法
  • 泽连斯基:正在等待俄方确认参加会谈的代表团组成
  • 光明日报:家长孩子共同“息屏”,也要保证高质量陪伴
  • 免签国+1,中乌(兹别克斯坦)互免签证协定6月生效