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

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

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          收藏夾

          linux

          產品交互

          分析,設計,架構

          安全

          技術牛人

          數據庫

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 延长县| 读书| 天津市| 清原| 贵阳市| 普兰县| 兰考县| 新疆| 永清县| 米脂县| 左云县| 大余县| 顺义区| 田阳县| 武威市| 河津市| 莱阳市| 金门县| 同江市| 长葛市| 沈阳市| 岫岩| 蒲城县| 合川市| 余姚市| 大荔县| 云安县| 瑞安市| 南郑县| 靖宇县| 日喀则市| 闽清县| 房产| 柳江县| 舟曲县| 阿城市| 金门县| 耒阳市| 瑞丽市| 华池县| 孟连|