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

java a a=null_面试题((A)null).fun()——java中null值的强转

面试题分享

public class A {public static void fun1() {

System.out.println("fun1");

}

public void fun2() {

System.out.println("fun2");

}

public static void main(String[] args) {

((A) null).fun1();

((A) null).fun2();

}

}

题目: 以上代码是否可以编译通过? 如可以通过,结果是什么?

答案: 代码可以编译通过,null 可以强制转为任意类型,调用其类中的静态方法不报异常,调用其类中的非静态方法会报空指针异常

理解

执行下面代码打印结果为 null:

A a = (A) null;

System.out.println(a);

由于将 null 强转为 A 的对象,编译上可以通过,

但是实际值仍然为 null,非静态方法是属于对象的方法,

所以调用非静态方法会报空指针异常

执行以下代码不报异常:

A a2 = null;

a2.fun1();

由于 fun1 是静态方法,静态方法数随着类加载而加载的,

所以 java 编译器在编译的过程中对我们的代码进行的了优化,

我们通过查看 class 文件即可看出,这两行代码改变成为了下面的样式:

A a2 = null;

fun1();

原因

java 编译器对于 使用对象调用类中的静态方法进行了优化。对于 a2.fun1() 给优化为 fun1()

**java 推荐使用类名直接调用静态方法 **, 从而减少了编译器的工作,提高了编译效率。

如图:左侧为 java 源文件,右侧为编译后的 class 文件

6756409381b53a6cba82152813871f23.png

原文出处:https://www.cnblogs.com/upuptop/p/11229146.html

相关文章:

  • java获取hashcode_java identityHashCode 和 hashCode
  • django mysql 加锁_Django数据库事务和死锁
  • 二叉树某结点的路径java_java二叉树和为某一个值的路径如何实现?思路分享
  • java清空JTextArea文本内容_java – 如何在JTextArea中更改文本的位置
  • java设计模式观察者模式吗_JAVA设计模式---观察者模式
  • java 简易的资源池_资源池设计模式 (Resource Pool)和数据池的简单实现
  • java替代重定向_Java 重定向与管道
  • java五子棋聊天功能_Java基于享元模式实现五子棋游戏功能实例详解
  • bandpass filter java_带通滤波器设计(Bandpass filter design).doc
  • java的位桶是什么,hashmap中的存储桶究竟是什么?
  • 缴费java代码_基于jsp的物业管理缴费系统-JavaEE实现物业管理缴费系统 - java项目源码...
  • java实体类间的转换_java 实体类集合转换和实体类转换
  • mysql碎片整理 提速_MysqL碎片整理优化
  • 一张纸对折13次JAVA_一张纸最多折叠8次?她把纸折叠了13次后,发生了什么?
  • plsq卸载 删除注册表、_oracle安装及使用常见问题及解决方案
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java编程基础24——递归练习
  • Java应用性能调优
  • Kibana配置logstash,报表一体化
  • Markdown 语法简单说明
  • node-glob通配符
  • React Native移动开发实战-3-实现页面间的数据传递
  • Vue.js源码(2):初探List Rendering
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • Yeoman_Bower_Grunt
  • 关于Java中分层中遇到的一些问题
  • 聚簇索引和非聚簇索引
  • 力扣(LeetCode)965
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 微信支付JSAPI,实测!终极方案
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • $.each()与$(selector).each()
  • (1)(1.13) SiK无线电高级配置(五)
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (过滤器)Filter和(监听器)listener
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)Google的Objective-C编码规范
  • .NET CORE Aws S3 使用
  • .NET Micro Framework初体验(二)
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @Autowired注解的实现原理
  • []T 还是 []*T, 这是一个问题
  • [ActionScript][AS3]小小笔记
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [codeforces] 25E Test || hash
  • [C语言]一维数组二维数组的大小
  • [Django 0-1] Core.Checks 模块
  • [Effective C++读书笔记]0012_复制对象时勿忘其每一部分