今天很好奇,对null进行强转会不会抛错。做了如下测试得到的结果是,

如果把null强转给对象,是不会抛异常的,本身对象是可以为null的。

但是如果是基本类型,比如 int i = (Integer)obj的强转,其实内部会调用intvalue方法去赋值给基本类型,所以这时候是会报错的。

代码如下

Object obj = null;

Integer s1 = (Integer)obj;

上面能正常执行,即把null赋值给一个对象或者强行类型转换赋值给对象都是没有问题的。如果s1是 int的基本类型呢?

代码如下,编译时不会报错

int s1 = (Integer)obj;

System.out.println(s1);

执行,则报java.lang.NullPointerException错误。

我们反编译后会发现调用了 intValue方法去获取value,所以抛出空指针错误:

Object obj = null;

int s1 = ((Integer)obj).intValue();

System.out.println(s1);

---------------------

public class NULL {

private static final String TAG = "NULL";

private void abc(){

System.out.println("123");

}

public static void main(String[] args) {

((NULL)null).abc();

}

}

以上代码运行时会报错:

Exception in thread "main" java.lang.NullPointerException

at com.test.NULL.main(NULL.java:14)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

若将方法abc加上静态修饰符static

public class NULL {

private static final String TAG = "NULL";

private static void abc(){

System.out.println("123");

}

public static void main(String[] args) {

((NULL)null).abc();

}

}

程序正常运行,输出

123

1

null可以被强制类型转换成任意类型的对象,通过这样的方式可以执行对象的静态方法,但如果方法不是静态方法的话,由于null对象并没有被实例化(分配空间),因而运行时会报空指针错误。

java 静态类设置null_JAVA中对null进行强制类型转换(null可以强转为任意对象,并执行对象的静态方法)...相关推荐

  1. C++中的四种强制类型转换

    转自CSDN 使用标准C++的类型转换符:static_cast.dynamic_cast.reinterpret_cast.和const_cast. 1 static_cast 用法:static_ ...

  2. C语言中结构体的强制类型转换

    最近在学习C语言中的Socket,遇到了结构体强制类型转换的问题,在这里记录一下. 我们看一个例子 struct sockaddr_in seraddr;memset(&seraddr, 0, ...

  3. java时间设置_JAVA中的时间操作

    java中的时间操作不外乎这四种情况: 1.获取当前时间 2.获取某个时间的某种格式 3.设置时间 4.时间的运算 好,下面就针对这四种情况,一个一个搞定. 一.获取当前时间 有两种方式可以获得,第一 ...

  4. Java jpanel 设置_Java中设置Jpanel的背景

    一起学习 1.创建一个类ImagePanel,代码如下 import java.awt.BorderLayout; import javax.swing.JPanel; import java.io. ...

  5. java 静态类实例_Java中多个类的静态实例?

    我是新的请不要介意,如果你发现问题愚蠢.我正在搞乱单身代码.我改变了一点(我的问题与单身无关,是的我已经删除了单实例检查).我的问题是虽然java中的类实例只能是一个为什么输出中有两个静态类" ...

  6. Java如何设置word中某段文字的字体/段落样式

    前言: 在我们的OA系统中,有时需要将某段文字字体/大小/颜色/段落样式做一个统一修改,或者直接在某个位置插入一段带样式的内容.这就需要我们学习微软activex控件的使用了.但是这需要开发者具备将a ...

  7. java喜好设置_Java中使用Preferences 的 API设置用户偏好

    Preferences的中文意思即偏好或喜好的意思,也就是说同一个程序在每次运行完后,可以通过Preferences来记录用户的偏好,下次启动时,程序会利用这些信息来了解用户的喜好.而这些信息个人理解 ...

  8. java 静态类 创建_Java 中的静态类

    Java 语言中可以定义一个静态类吗? 答案是显而易见的:YES ,Java 语言存在静态类. 我们都知道,Java 语言中存在 静态变量 .存在 静态方法 .也存在 静态块.其实,Java 语言还存 ...

  9. java classpath设置_Java中classpath怎么设置

    classpath的设置方法:首先点击"我的电脑":然后选择"属性",并找到"高级设置"中的"环境变量":接着在里面的系 ...

最新文章

  1. SQL Server中通过设置SET NOCOUNT来优化存储过程
  2. 在Linux上分析硬件检测日志
  3. Maven父子工程配置文件详解
  4. 以太坊再爆高危漏洞!黑客增发ATN 1100万枚token事件始末
  5. 安利一个我爱不释手的PDF神器网站
  6. dart 怎么判断function的返回值为空_R 学习-第二章第二节- 尝试写个Function,超级菜鸟教程...
  7. ncl批量处理多个nc文件_Python办公自动化批量处理文件,一学就会
  8. Chrome插件GitZip(下载github项目中的部分文件)
  9. bootstrap bootbox 属性及用法
  10. MATLAB中绘制椭圆
  11. [css] 怎么自定义鼠标指针的图案?
  12. 人工神经网络:径向基函数神经网络
  13. 推荐下载Adobe Reader(PDF阅读器)9.0 简体中文版
  14. Oracle-08:连接查询
  15. 回忆高中数学--概述“奇变偶不变,符号看象限”
  16. flink水位线简介
  17. IDEA远程连接数据库
  18. nginx安装并配置实现端口转发
  19. C#实现自动下载阿里云数据库RDS,附转储阿里云OSS服务器
  20. 超详细Swagger基本使用方法【狂神】

热门文章

  1. KMP算法的JavaScript实现
  2. Topo系统的益处和帮助
  3. C# 如何获取屏幕分辨率缩放比例
  4. SQL 脚本中的全角逗号引起【ORA-01756: 引号内的字符串没有正确结束】
  5. 关注地方门户网站盈利模式
  6. 在ie8下ext显示的问题
  7. kafka启动报错Java HotSpotTM 64-bit Server VM warning:INFO: os::commit_memory
  8. 2008matlab error 95,VS2008和MATLAB2010b混合编程有关问题 error LINK2028 恳请指教!(2)
  9. android学习资料_5G到来未来五年,纯应用的安卓开发者如何学习通过音视频破局?...
  10. php 生成ai文件,php_Generator php 生成器