java.lang.ClassCastException异常出现有哪些情况?
严重: Servlet.service() for servlet action threw exception
java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.mhjl.gtmodule.Mhuser
这个错误我老是遇到,我知道是我在写方法时有错误。可是我老改不了犯这个错误。
除了这个外,还有什么情况会出现这个异常呢? 展开
这是因为类型装换错误。
出现这种情况的原因及解决方法有:
原因:String cannot be cast to java.lang.Integer,String类型数据不能转到Integer类型,这是因为程序中的TreeSet中添加数据时要求进行对数据排序,而进行比较时只能在统一的类型下面比较,所以Integer 类型的和String类型的就会不能比较,所以报异常
解决方法:将add()函数中的内容全部修改为字符串类型,即add("123");,之后就能正常运行了
扩展资料:
类型转换是因为每个函数都可以强制将一个表达式转换成某种特定数据类型。自动(隐式)类型转换不会导致数据丢失。
数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。 变量是用来存储值的所在处;它们有名字和数据类型。
变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明变量时也可指定它的数据类型。所有变量都具有数据类型,以决定能够存储哪种数据。
ClassCastException是JVM在检测到两个类型间转换不兼容时引发的运行时异常。
此类错误通常会终止用户请求。在执行任何子系统的应用程序代码时都有可能发生ClassCastException异常。通过转换,可以指示Java编译器将给定类型的变量作为另一种变量来处理。对基础类型和用户定义类型都可以转换。
不过,某些转换还需要运行时验证。如果在此运行时验证过程中检测到不兼容,JVM就会引发ClassCastException异常。
出现这个异常的情况如下:
1、一个类是数字类,而由于误操作,错误的将数字类向数字类转换改写成了数字类向字符串类的转换,从而产生了异常。
2、大部分原因是因为强制转换或者是SQL映射时发生了这个异常。
扩展资料:
当抛出这个异常的时候,表示代码企图投射一个对象到一个并不是实例的子类
举例以下代码就会产生一个ClassCastException:
ClassCastException:
Object x = new Integer(0);
System.out.println((String)x);
比如你有个A类和B类..两个类没有任何关系..
然后你A a = new A();
B b = (B)a;
这样就运行期就会报这个异常了..
但是假如你的B类继承自A类就不会了..
如果你想避免这个错误的话..
可以在转型前检查一下..a对象是否是B类型..用instanceof关键字..
比如if(a instanceof B) {B b = (B)a;} 这样就行了..