ClassCastException。

ClassCastException。这个错误也很常见,通常在程序中出现强制类型转换时出现这个错误,如下面这段代码所示:publicstaticMapm=newHashMap(){ { put("a","2"); } }; publicstaticvoidmain(String[]args){ IntegerisInt=(Integer)m.get("a"…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

这个错误也很常见,通常在程序中出现强制类型转换时出现这个错误,如下面这段代码所示:

        public static Map m = new HashMap() {
		{
			put("a", "2");
		}
	};

	public static void main(String[] args) {
		Integer isInt = (Integer) m.get("a");
		System.out.println(isInt);
	}

当强制将本来不是Integer类型的字符串转成Integer类型时会报如下错误:

ClassCastException。

JVM在做类型转换时会按照如下规则进行检查:

  •     对于普通对象,对象必须是目标类的实例或目标类的子类的实例。如果目标类是接口,那么会把他当作实现了该接口的一个子类。
  •     对于数组类型,目标类必须是数组类型或java.lang.Object、java.lang.Cloneable、java.io.Serializable。

如果不满足上面的规则,JVM会报这个错误了。要避免这个错误有两种方式:

  •     在容量类型中显式的指明这个容器所包含的对象类型,如在上面的Map中可以写为Map<String, Integer> m = new HashMap<String, Integer>(),这样上面的代码在编译阶段就会检查通过。
  •     先通过instanceof检查是不是目标类型,然后再进行强制类型转换。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195746.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2022年Redis最新面试题第6篇 – Redis淘汰策略「建议收藏」

    2022年Redis最新面试题第6篇 – Redis淘汰策略「建议收藏」Redis过期键的删除策略?出现概率:★★★★Redis过期键的删除策略是:定期删除+惰性删除。1)、关于定期删除,Redis默认会每隔100ms就随机选取一些已经过期了的key,检查其是否过期,如果已经过期就删除。不过假设Redis里放了100w个key,而且都设置了过期时间,你每隔几百毫秒,就检查100w个key,那Redis基本上就卡死了,cpu负载也会很高的,基本都消耗在检查过期key上了。注意,这里可不是每隔100ms就遍历所有的设置过期时间的key,那样就是一场性能上的灾难。实际情况是每

    2022年10月21日
    2
  • 【最佳网页宽度及其实现】「建议收藏」

    1.设计网页的时候,确定宽度是一件很苦恼的事。以minifun…

    2022年1月18日
    67
  • 彻底禁止win10更新的锅「建议收藏」

    彻底禁止win10更新的锅「建议收藏」背景:tonight,和往常一样,就在打开vmware的一瞬间……突然弹出下面这个令人懵逼致死的图:百度搜索一通,众说纷纭,发现竟然还是win10系统的锅。下面开始解决问题,直接上图:这1903版本不支持vmware14,需要更新vm为15版本,商业套路,NM真够了,果断拒绝,还是另想办法吧;想着把1903更新卸载了,但是没有卵用,重启之后,出现下图,反应老半天…

    2022年6月17日
    23
  • 电脑可以同时安装两个版本的jdk吗_jdk重复安装了怎么办

    电脑可以同时安装两个版本的jdk吗_jdk重复安装了怎么办场景:公司项目使用的jdk为1.7,最近不是很忙,找到一个爬虫系统学习。该系统使用到了jdk1.8的特性,所以Ineed俩版本,开整!!!1.准备两个版本的jdk我的两个jdk路径为:D:\jdk1.7.0_80D:\ProgramFiles\Java\jdk1.8.0_1112.设置两个子JAVA_HOME,一个总设置两个子JAVA_HOME:…

    2022年9月23日
    5
  • docker如何启动镜像_镜像是反的吗

    docker如何启动镜像_镜像是反的吗一、dockerrun启动–env-file表示从文件加载环境变量,文件格式为key=value每行一个变量-v表示将宿主机上的文件挂载到镜像中,冒号前面表示宿主机文件路径,后面表示镜像文件路径,都要用绝对路径-p表示将镜像中的8080端口映射到宿主机上的8083端口,10.142.8.12代表宿主机ipdockerrun-it–env-file./run/h…

    2022年9月22日
    1
  • 传统图像降噪算法之BM3D原理详解

    传统图像降噪算法之BM3D原理详解       图像降噪是一个十分具有实用价值的研究方向,因为噪声总是无处不在的。当处于比较昏暗的环境时,噪声将极大地影响着我们所拍摄的图像。如今,随着深度学习算法以及相关硬件的不断发展,深度卷积网络同样在图像降噪领域占据了主流,并且代表了该领域最优异的成绩。但是,深度神经网络同样有着其缺点,例如模型过于庞大而计算复杂度过高,以及缺乏一些理论上的解释性,当然这些缺点正不断地得到弥补。为了更好地理解图像降噪的基本原理,我们有必要回过头来仔细研

    2022年6月7日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号