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 閱讀(594) 評論(0)  編輯  收藏 所屬分類: java基礎

          <2012年1月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          收藏夾

          linux

          產品交互

          分析,設計,架構

          安全

          技術牛人

          數據庫

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 儋州市| 铜陵市| 凤阳县| 梨树县| 安吉县| 清涧县| 湄潭县| 特克斯县| 施甸县| 海口市| 镇江市| 岳池县| 临安市| 砚山县| 佛学| 夏津县| 拉孜县| 庄浪县| 恭城| 肥东县| 公安县| 津市市| 景洪市| 夏河县| 正安县| 金溪县| 巩义市| 舞钢市| 兖州市| 龙南县| 双牌县| 吴江市| 阜宁县| 镇康县| 平乡县| 永兴县| 师宗县| 肥东县| 吉安市| 烟台市| 汉中市|