为什么这段代码不抛出 NullPointerException

2023-11-24

我只是和我的朋友讨论使用类名调用静态方法,并尝试了这段代码,并期望它在运行时抛出 NPE。但事实证明它没有作用。我只是想了解执行顺序。

public class One {

    public static void method() {
        System.out.println("in static one");
    }
}

public class Two {

    static One o;

    public static void main(String[] args) {
        o.method(); // expected NPE here, as o is null
    }
}

我知道静态方法应该使用它们的类名来调用,我什至知道当我们使用实例调用静态方法时,IDE 会发出编译器警告。但我们也可以通过创建实例来调用它们,但是,我从未在这里创建过实例,o应该得到它的默认值 null,从而调用o.method()应该在运行时抛出 NPE,但事实并非如此。你们能解释一下这段代码中的执行顺序吗?


它之所以有效,是因为重要的是编译时类型 of the o场地。编译器会编译o.method()到相同的字节码One.method().

特别是,如果您有课Two延伸One,并且都声明一个static void method(), then

One x = new Two();
x.method(); // calls One.method(), not Two.method()

有利于混淆目的,但不太利于可维护性......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这段代码不抛出 NullPointerException 的相关文章

  • 在文本文件中写入多行(java)

    下面的代码是运行命令cmd并使用命令行的输出生成一个文本文件 下面的代码在 Eclipse 的输出窗口中显示了正确的信息 但在文本文件中只打印了最后一行 谁能帮我这个 import java io public class TextFile
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • SAML 服务提供商 Spring Security

    当使用预先配置的服务提供者元数据时 在 Spring Security 中 是否应该有 2 个用于扩展元数据委托的 bean 定义 一份用于 IDP 元数据 一份用于 SP 元数据
  • org.apache.sling.api.resource,version=[2.3,3) -- 无法解析

    您好 我无法访问我的项目内容 我已经上传了从 CQ 访问内容所需的所有包 我唯一能看到的是 org apache sling api resource version 2 3 3 无法解析 这是否是异常的原因 如果是 请告诉我如何解决 中Q
  • 正则表达式拆分数字和字母组,不带空格

    如果我有一个像 11E12C108N 这样的字符串 它是字母组和数字组的串联 如何在中间没有分隔符空格字符的情况下分割它们 例如 我希望分割结果为 tokens 0 11 tokens 1 E tokens 2 12 tokens 3 C
  • wait() 在游戏中如何工作?

    在 playframework 的文档中here http www playframework org documentation 1 2 1 asynchronous已写 public static void loopWithoutBlo
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • 当从服务类中调用时,Spring @Transactional 不适用于带注释的方法

    在下面的代码中 当方法内部 是从内部调用的方法外部 应该在交易范围内 但事实并非如此 但当方法内部 直接从调用我的控制器class 它受到事务的约束 有什么解释吗 这是控制器类 Controller public class MyContr
  • 我需要什么库才能在 Java 中访问这个 com.sun.image.codec.jpeg?

    我正在用java创建一个图像水印程序 并导入了以下内容 import com sun image codec jpeg JPEGCodec import com sun image codec jpeg JPEGEncodeParam im
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • 在 Objective C 的类方法中引用类本身

    我希望我没有跳过 ObjC 手册中的这一部分 但是是否可以从类的一个类方法中引用该类 就像在 PHP 中一样 您将使用 this 来引用当前实例 而 self 引用实例的类 this 的 ObjC 等价物将是 self 那么 PHP 的 s
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • 欧洲中部时间 14 日 3 月 30 日星期五 00:00:00 至 日/月/年

    我尝试解析格式日期Fri Mar 30 00 00 00 CET 14至 日 月 年 这是我的代码 SimpleDateFormat formatter new SimpleDateFormat dd MM yyyy System out
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android

随机推荐

  • 接口和抽象类有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 接口与抽象类 一般 OO 我不太清楚其中的区别 Thanks 它们非常相似 但存在一些重要的技术差异 抽象类允许您为某些方法提供默认实现 但接口不允许您提供任何实现 你可以实现多个接口 但只能继承一个
  • 如何制作像谷歌地图应用程序一样的滑动面板?

    我正在寻找类似的东西Android滑动面板对于 iOS 我发现MBP下拉控制器 但它需要使用两个 ViewController 并且需要对我正在实现的应用程序的架构进行重大更改 我只想要在现有视图控制器中添加子视图的东西 我该怎么做呢 我在
  • 递归函数不返回任何内容? [复制]

    这个问题在这里已经有答案了 我编写了以下函数来实现我自己的二分搜索 def bisect input target mid len input 2 if len input 1 if input 0 target return 1 else
  • Python - 在每一行的不同位置对数组进行切片

    我有一个 2D python 数组 我想以一种奇怪的方式对其进行切片 我想要一个恒定宽度的切片 从每行的不同位置开始 如果可能的话 我想以矢量化的方式做到这一点 例如我有数组A np array range 5 range 5 看起来像 a
  • 在 Java 中,给定一个 IP 地址范围,返回覆盖该范围的 CIDR 块的最小列表

    我在将 IP 地址范围转换为 CIDR 块列表时遇到一些逻辑问题 我确实相信这个网站做得对 http ip2cidr com 我想传入一个起始 IP 地址和一个结束 IP 地址 并让 java 吐出所需的 CIDR 块的最小列表 以仅覆盖传
  • 如何防止 Cassandra 提交日志填满磁盘空间

    我正在 AWS 上运行一个两节点 Datastax AMI 集群 昨天 卡桑德拉开始拒绝一切事物的连接 系统日志没有显示任何内容 之后lot在修补过程中 我发现提交日志已填满分配的安装上的所有磁盘空间 这似乎导致连接拒绝 删除了一些提交日志
  • 如何使用 mod_proxy 保留通过 AJP 连接器发送到 Apache 的 Tomcat HTTP 响应的 Content-Type 标头

    我遇到了 HTTP 响应不正确的问题Content Type通过 AJP 1 3 连接器访问 Apache 后面的 Tomcat 中托管的 Axis2 Web 服务时 会使用此标头 我可以通过其 RESTful 接口在浏览器中毫无问题地访问
  • 如何在窗口形式的datagridview单元格中放置自定义控件

    我正在开发一个窗口窗体应用程序 我需要在数据网格视图的单元格中放置由两个标签组成的自定义控件 我已经创建了自定义控件 指导我使用自定义控件填充单元格 我认为您想创建自己的编辑控件来实现 IDataGridViewEditingControl
  • 将列表的元素转换为二进制

    假设我有一个列表 lst 0 1 0 0 我怎样才能让python将此列表解释为二进制数0100 以便2 0100 给我01000 我能想到的唯一方法是首先创建一个函数 将 二进制 元素转换为相应的整数 以 10 为基数 然后使用 bin
  • Spring Security NoClassDefFoundError 错误

    从事 Spring 项目并正在学习使用 Spring Security 该项目正在发挥作用 但突然决定不这样做 谁能解释一下为什么 WebInit java package com catalyst Config import javax
  • Redis批量插入

    我正在考虑使用 Redis 协议进行批量插入 如下所述 http redis io topics mass insert在我忙于编写代码来处理这个问题之前 我只想确保我清楚 Redis 需要什么来完成这项工作 上面的链接建议 要使用批量插入
  • 如何处理返回除 ViewResult 之外的结果的操作的授权?

    我在 ASP NET MVC 控制器上使用自定义授权过滤器 如果用户在特定操作上授权失败 该过滤器会将用户重定向到登录屏幕以外的 URL 这对于返回视图的操作来说是可以的 但是我的许多操作返回其他结果类型 例如 PartialResult
  • 实际的机器代码在各个方面是什么样子的? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 关于机器代码到底是什么似乎有很多观点 我听有人说它是汇编 二进制或十六进制 机器代码本质
  • Java Swing 的地图 API

    我想在 swing 应用程序中可视化地理地图 我只找到了 swingx 地图 api 你还知道其他开源地图API吗 Try Geotools 它有一个很好的地理空间数据API和工具
  • Swift Mac OSX NSButton 标题颜色

    我想知道如何在 swift 中将标题颜色更改为 NSButton 我在 Objective C 中看到了很多示例 但我认为 swift 中的实现是不同的 任何人都可以为我提供一个示例吗 试试这个viewDidLoad或某处 在斯威夫特 3
  • 如何解决 MS Access 2010 中的“条件表达式中的数据类型不匹配”错误? [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我正在尝试对 MS Access 数据库中的报告进行故障排除 该文件是由在我加入我所工作的组织之前担任我的职位的人员构建的 报告抛出错误 条件表达式中的数据类型不匹配 这使我相信导入数据库
  • 运行时主机到底是什么?

    Runtime Host 的确切定义是什么 来自MSDN 公共语言运行时被设计为支持各种不同类型的应用程序 从Web 服务器应用程序到具有传统的丰富Windows 用户界面的应用程序 每种类型的应用程序都需要运行时主机来启动它 运行时主机将
  • 如何在 Java 中检测 Image 对象上的鼠标单击事件?

    实施 国王角Java 中的 美化的多人纸牌游戏 我试图允许玩家将一张牌 图像 从他们的手上拖到桌子上的其他地方 问题在于玩家的手是 扇形 的 因此纸牌的图像会旋转并且重叠 这是一手牌的例子 我考虑过让每张卡都成为JPanel 但问题是我必须
  • C++ 先前的定义错误

    因此 感谢这个网站 我找到了之前问题的答案 我正在向 GNU automake 项目中的类添加一个函数 该函数使用指向doc目的 依赖项包含在 Makefile am 文件中以包含doc h and plsa h按各自的顺序 但是 当我编译
  • 为什么这段代码不抛出 NullPointerException

    我只是和我的朋友讨论使用类名调用静态方法 并尝试了这段代码 并期望它在运行时抛出 NPE 但事实证明它没有作用 我只是想了解执行顺序 public class One public static void method System out