一道非常有趣的基础题 , 如下所示 , main方法正常运行还是报空指针异常呢

public class XUtil {public static int num = 10;public static void sayHello() {System.out.println("Hello");}
}public class XDemo {public static void main(String[] args) throws Exception {XUtil entity = null;System.out.println(entity.num);entity.sayHello();}
}

答案是 , 正常输出 :

10
Hello

这可能和我们之前所理解的有些偏差 , 用null对象调用任何属性或方法不是都会报空指针异常吗 ?

我们来看一下XDemo编译后的class文件

很明显可以看到 , 编译期已经自动帮我们把entity换回了原本应该用的类名XUtil  .

那为什么要帮我们做这件事呢 . 这还是static修饰符的基础知识点 .

static表示"全局"或者"静态"的意思 , 用来修饰成员变量和成员方法和内部静态类 , 也可以形成静态static代码块 . 被static修饰的成员变量和成员方法独立于该类的任何对象 , 也就是说 , 它不依赖类特定的实例 , 被类的所有实例共享 , 在类被加载的时候(实例化之前)就被载入方法区;
通俗的来说 , 因为静态成员是属于类的而非实例对象 , 所以无论用任何实例对象去调用静态成员时 , java编译期会自动替换为类去调用(替你纠正) , 所以无论实例对象(entity)是否为null , 都不影响类访问它的静态成员 .

关于这个问题 , 还有一篇更专业的从字节码角度上分析的文章 , 大家可以参考 : 点击查看

null对象访问static属性或方法相关推荐

  1. Ajax--概述、xhr对象的常用属性和方法、xhr的常用事件、xhr对象发送POST请求、xhr对象发送GET请求、xhr对象的兼容性问题、数据交换格式(XML、JSON)

    一.概述 1.1 发展历程 在开始之前先来看一下Ajax的工作原理吧,如下图所示: Ajax全称Asynchronous javascript and xml(异步 JavaScript 和 XML) ...

  2. selenium提取数据之driver对象的常用属性和方法

    selenium提取数据之driver对象的常用属性和方法 在使用selenium过程中,实例化driver对象后,driver对象有一些常用的属性和方法 driver.page_source 当前标 ...

  3. 第60天:js常用访问CSS属性的方法

    一. js 常用访问CSS 属性的方法 我们访问得到css 属性,比较常用的有两种: 1. 利用点语法  box.style.width      box.style.top     点语法可以得到 ...

  4. dom对象常用的属性和方法有哪些?

    dom对象常用的属性和方法有哪些? 一.总结 一句话总结: 1.document属性和方法:document的属性有head,body之类,方法有各种获取element的方法 2.element的属性 ...

  5. python封装:隐藏对象中的属性或方法(三分钟读懂)

    封装:隐藏对象中的属性或方法 隐藏对象中的属性 隐藏:- 将对象的属性名,修改为一个外部不知道的名字 我们使用时,有特殊方法来处理获取(修改)对象中的属性 获取(修改)对象中的属性 需要提供一个get ...

  6. TextField对象相关的属性和方法总结

    TextField对象相关的属性和方法,内容十分丰富,下面几个表格: 表一 TextField 对象的方法 方法 说明 TextField.addListener 加入接收触发事件如文本域内容变化或滚 ...

  7. JavaScript学习(六十六)—字符串对象常用的属性和方法总结以及数组元素的排序问题

    JavaScript学习(六十六)-字符串对象常用的属性和方法总结以及数组元素的排序问题 学习内容 一.数组去重问题 二.二维数组的定义 三.二维数组的元素操作 四.二维数组的遍历 五.关联数组 六. ...

  8. JavaScript学习(三十三)—事件对象常用的属性和方法

    JavaScript学习(三十三)-事件对象常用的属性和方法 (一).type属性 <style>#box {width: 200px;height:

  9. JavaScript学习(六)—location对象常用的属性和方法

    JavaScript学习(六)-location对象常用的属性和方法 一.location对象 作用:location是window对象的一个属性,本身也是对象类型,它的作用是用来获取文档对象的相关信 ...

最新文章

  1. python 学习
  2. linux学习总结之基本命令
  3. 区块链技术怎么构架落地应用?
  4. 动态规划——最长公共子序列(洛谷P1439)
  5. excel常用函数公式及技巧_Excel统计类函数公式应用技巧解读,绝对的硬核干货!...
  6. 案例:Oracle dul数据挖掘 没有数据库备份非常规恢复truncate删除的数据表
  7. MVC3----配置连接数据库
  8. mongoDB之监控工具mongotop
  9. 西贝凭什么一年做到50多亿?| 独创的合伙人制:创业分部+赛场制
  10. 【OpenCV】Chapter7.图像噪声与滤波器
  11. 阿里云服务器运行环境配置教程
  12. 苏州微软面试--机器学习自然语言处理
  13. 百度地图点击marker换图标的两种方式
  14. Ubuntu系统迁移至固态硬盘(生产环境勿用)
  15. 【V-REP自学笔记(八)】控制youBot抓取和移动物体
  16. IDEA如何导入一个已有项目
  17. Tripleo之nova-compute 和Ironic的代码深入分析(三)
  18. 快速排序算法 ( 挖坑法 ) ------- C语言
  19. 虹科蕴藏在废物分类中的机器人技术革命
  20. python对象介绍

热门文章

  1. limit offset
  2. Python:Anaconda安装虚拟环境到指定路径
  3. 网页Loading,让页面加载完再显示
  4. Net设计模式实例之中介者模式(Mediator Pattern)
  5. 几个ASP.NET小技巧
  6. Python_argparse
  7. jQuery源码研究分析学习笔记-静态方法和属性(10)
  8. 视频压缩的I帧,P帧和B帧。
  9. Tips--利用shell脚本批量提取txt文件中任意字段
  10. pycharm中设置显示行数