ClassCastException

ClassCastException类型转换异常,是一个运行时异常。

 

非常常见就是不同类型之间的强制类型转换就会抛出ClassCastException异常。还有一种就是不同ClassLoader加载的相同的类型转换也会抛出ClassCastException。接下来我用代码来详细解释下。

 

1、 强制类型转换

public class ClassCastExceptionTest {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

       Animal a1 = new Dog(); //1

       Animal a2 = new Cat(); //2

       Dog d1 = (Dog)a1;       //3

       Dog d2 = (Dog)a2;       //4

    }

}

把猫转换成狗,是不对的。后面注释为4的代码是无法正常赋值的。

Exception in thread "main" java.lang.ClassCastException: Cat cannot be cast to Dog

    at ClassCastExceptionTest.main(ClassCastExceptionTest.java:13)

 

 

2、 不同classloader加载相同类型类之间的转换

import java.io.File;

import java.net.URL;

import java.net.URLClassLoader;

 

 

public class ClassCastExceptionTest {

    /**

     * @param args

     */

    public static void main(String[] args) throws Exception {

       File file = new File(Thread.currentThread().getContextClassLoader().getResource("").getPath());

       URL[] urls = {file.toURL()};

       URLClassLoader classloader1 = new URLClassLoader(urls, ClassLoader.getSystemClassLoader().getParent());

       Class classloader1Animal1 = classloader1.loadClass("Dog");

       Dog dog1 = (Dog)classloader1Animal1.newInstance();

      

       URLClassLoader classloader2 = new URLClassLoader(urls, ClassLoader.getSystemClassLoader().getParent());

       Class classloader1Animal2 = classloader1.loadClass("Dog");

       Dog dog2 = (Dog)classloader1Animal1.newInstance();

      

       dog1 = dog2;

    }

 

}

 

代码中我们看到dog1=dog2,这样赋值是会抛异常的。

Exception in thread "main" java.lang.ClassCastException: Dog cannot be cast to Dog

    at ClassCastExceptionTest.main(ClassCastExceptionTest.java:17)

 

以后大家遇到classCastException的时候要注意了,不一定是强制类型转换导致的,也有可能不同的classloader加载了相同的类,然后这个类不同的实例进行赋值。

posted on 2012-01-10 16:07 yangpingyu 阅读(574) 评论(0)  编辑  收藏 所属分类: java基础


只有注册用户登录后才能发表评论。


网站导航:
 
<2012年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿

随笔分类

随笔档案

收藏夹

linux

产品交互

分析,设计,架构

安全

技术牛人

数据库

搜索

最新评论

阅读排行榜

评论排行榜