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

          產品交互

          分析,設計,架構

          安全

          技術牛人

          數據庫

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 黄大仙区| 石棉县| 武川县| 邳州市| 元谋县| 石家庄市| 香河县| 皋兰县| 长阳| 上杭县| 松滋市| 彰化县| 巴彦县| 昌图县| 济南市| 濮阳县| 内江市| 赤水市| 玉溪市| 丰顺县| 凤阳县| 清流县| 锡林郭勒盟| 南康市| 桓仁| 布拖县| 和林格尔县| 拜泉县| 西昌市| 长子县| 会同县| 丰台区| 清丰县| 横山县| 乌兰浩特市| 海丰县| 都江堰市| 二连浩特市| 黄冈市| 安宁市| 湟源县|