java.lang.ClassCastException异常
2013-05-18 12:45
323 查看
ClassCastException,从字面上看,是类型转换错误,通常是进行强制类型转换时候出的错误。下面对产生ClassCastException异常的原因进行分析,然后给出这种异常的解决方法。
这种异常是如何产生的呢?举一个比较形象的例子。
Animal表示动物,Dog表示狗,是动物的子类,Cat表示猫,是动物的子类。看下面的代码:
Animal a1 = new Dog(); // 1
Animal a2 = new Cat(); // 2
Dog d1 = (Dog)a1; //3
Dog d2 = (Dog)a2; //4
第3行代码和第4行代码基本相同,从字面意思看都是把动物(Animal)强制转换为狗(Dog),但是第4行代码将产生java.lang.ClassCastException。原因是你要把一个猫(a2这只动物是猫)转换成狗,而第3行中是把狗转换成狗,所以可以。
从上面的例子看,java.lang.ClassCastException是进行强制类型转换的时候产生的异常,强制类型转换的前提是父类引用指向的对象的类型是子类的时候才可以进行强制类型转换,如果父类引用指向的对象的类型不是子类的时候将产生java.lang.ClassCastException异常。就是上面a1和a2都是动物,但是a1这只动物是一只狗,而a2这只动物是猫,所以要把a1转换成狗可以,因为a1本身就是狗,而a2是一只猫,所以要转换成狗就出错了。
遇到这样的异常的时候如何解决呢?如果你知道要访问的的对象的具体类型,直接转换成该类型即可。如果不能确定类型可以通过下面的两种方式进行处理(假设对象为o):
1、通过o.getClass().getName()得到具体的类型,可以通过输出语句输出这个类型,然后根据类型进行进行具体的处理。
2、通过if(o instanceof 类型)的语句来判断o的类型是什么。
这种异常是如何产生的呢?举一个比较形象的例子。
Animal表示动物,Dog表示狗,是动物的子类,Cat表示猫,是动物的子类。看下面的代码:
Animal a1 = new Dog(); // 1
Animal a2 = new Cat(); // 2
Dog d1 = (Dog)a1; //3
Dog d2 = (Dog)a2; //4
第3行代码和第4行代码基本相同,从字面意思看都是把动物(Animal)强制转换为狗(Dog),但是第4行代码将产生java.lang.ClassCastException。原因是你要把一个猫(a2这只动物是猫)转换成狗,而第3行中是把狗转换成狗,所以可以。
从上面的例子看,java.lang.ClassCastException是进行强制类型转换的时候产生的异常,强制类型转换的前提是父类引用指向的对象的类型是子类的时候才可以进行强制类型转换,如果父类引用指向的对象的类型不是子类的时候将产生java.lang.ClassCastException异常。就是上面a1和a2都是动物,但是a1这只动物是一只狗,而a2这只动物是猫,所以要把a1转换成狗可以,因为a1本身就是狗,而a2是一只猫,所以要转换成狗就出错了。
遇到这样的异常的时候如何解决呢?如果你知道要访问的的对象的具体类型,直接转换成该类型即可。如果不能确定类型可以通过下面的两种方式进行处理(假设对象为o):
1、通过o.getClass().getName()得到具体的类型,可以通过输出语句输出这个类型,然后根据类型进行进行具体的处理。
2、通过if(o instanceof 类型)的语句来判断o的类型是什么。
相关文章推荐
- Redis操作异常: java.lang.ClassCastException: java.lang.Long cannot be cast to [B
- [Domino]“java.lang.ClassCastException:lotus.domino.cso.Item”异常解决办法
- tomcat下运行cxf异常 java.lang.ClassCastException
- java.lang.ClassCastException: antlr.CommonToken异常[weblogic]
- 关于启动Tomcat出现异常:java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter
- [Domino]“java.lang.ClassCastException:lotus.domino.cso.Item”异常解决办法
- 通知栏异常 android.app.RemoteServiceException:Bad notifcation for Foreground :java.lang.ClassCastExceptio
- 关于struts2+hibernate3.2中出现的java.lang.ClassCastException: java.lang.Integer异常的解决方案
- 通知栏异常 android.app.RemoteServiceException:Bad notifcation for Foreground :java.lang.ClassCastExceptio
- jsp异常:org.apache.jasper.JasperException: java.lang.ClassCastException三种解决方法
- 解决EJB本地调用“java.lang.ClassCastException: $Proxy96 cannot be cast to com.tgb.ejb.UserManager”异常
- 关于启动Tomcat出现异常:java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter
- java.lang.ClassCastException: android.app.Application cannot be cast to 异常
- SSH下内嵌的java.lang.ClassCastException异常查找
- java.lang.ClassCastException android.widget.RelativeLayout LayoutParams 异常
- 调用ejb出现java.lang.ClassCastException异常
- 异常处理:java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.Parameterized
- java.lang.ClassCastException: android.widget.Button异常
- jsp异常:org.apache.jasper.JasperException: java.lang.ClassCastException三种解决方法
- 解决异常:java.lang.ClassCastException:android.app.Aplication cannot be cast to 类名