<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Flyingis

    Talking and thinking freely !
    Flying in the world of GIS !
    隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0
    數據加載中……

    ClassCastException深入分析

    作者:Flyingis

          ClassCastException
    JVM在檢測到兩個類型間轉換不兼容時引發的運行時異常。此類錯誤通常會終止用戶請求。在執行任何子系統的應用程序代碼時都有可能發生ClassCastException異常。通過轉換,可以指示Java編譯器將給定類型的變量作為另一種變量來處理。對基礎類型和用戶定義類型都可以轉換。Java語言規范定義了允許的轉換,其中大多數可在編譯時進行驗證。不過,某些轉換還需要運行時驗證。如果在此運行時驗證過程中檢測到不兼容,JVM就會引發ClassCastException異常。例如:

    Fruit f;

    Apple a = (Apple)f;

    當出現下列情況時,就會引發ClassCastException異常:

    1.        FruitApple類不兼容。當應用程序代碼嘗試將某一對象轉換為某一子類時,如果該對象并非該子類的實例,JVM就會拋出ClassCastException異常。

    2.        FruitApple類兼容,但加載時使用了不同的ClassLoader。這是這種異常發生最常見的原因。在這里,需要了解一下什么是ClassLoader


    ClassLoader

             ClassLoader是允許JVM查找和加載類的一種Java類。JVM有內置的ClassLoader。不過,應用程序可以定義自定義的ClassLoader。應用程序定義新的ClassLoader通常出于以下兩種原因:

    1.        自定義和擴展JVM加載類的方式。例如,增加對新的類庫(網絡、加密文件等)的支持。

    2.        劃分JVM名稱空間,避免名稱沖突。例如,可以利用劃分技術同時運行同一應用程序的多個版本(基于空間的劃分)。此項技術在應用服務器(WebLogic Server)內的另一個重要用途是啟用應用程序熱重新部署,即在不重新啟動JVM的情況下啟動應用程序的新版本(基于時間的劃分)

    ClassLoader按層級方式進行組織。除系統BootClassLoader外,其它ClassLoader都必須有父ClassLoader

    在理解類加載的時候,需要注意以下幾點:

    1.        永遠無法在同一ClassLoader中重新加載類。“熱重新部署”需要使用新的ClassLoader。每個類對其ClassLoader的引用都是不可變的:this.getClass().getClassLoader()

    2.        在加載類之前,ClassLoader始終會先詢問其父ClassLoader(委托模型)。這意味著將永遠無法重寫“核心”類。

    3.        同級ClassLoader間互不了解。

    4.        由不同ClassLoader加載的同一類文件也會被視為不同的類,即便每個字節都完全相同。這是ClassCastException的一個典型原因。

    5.        可以使用Thread.setContextClassLoader(a)ClassLoader連接到線程的上下文。

    基于以上的基本原理,可以加深大家對ClassCastException的理解,和在碰到問題時提供一種解決問題的思路。

     

    參考文獻:

    dev2dev專刊 2005 第二期

    j2sdk-1_5_0-doc

    posted on 2005-12-18 18:57 Flyingis 閱讀(28704) 評論(4)  編輯  收藏 所屬分類: JavaSE

    評論

    # re: ClassCastException深入分析  回復  更多評論   

    收藏:http://www.tkk7.com/ephon/archive/2006/01/17/28279.html
    有收獲。
    2006-01-17 10:31 | NsGFr

    # re: ClassCastException深入分析  回復  更多評論   

    Thanks,解決了一個bug
    2006-01-24 10:31 | Sunny

    # re: ClassCastException深入分析  回復  更多評論   

    ClassLoader
    還是不懂
    2006-02-08 18:34 | http://www.tkk7.com/flyingis/

    # re: ClassCastException深入分析  回復  更多評論   

    android培訓知識
    2012-08-08 09:07 | 鄭昌奮
    主站蜘蛛池模板: 日韩av无码久久精品免费| 久久国产精品免费观看| 桃子视频在线观看高清免费完整| 亚洲国产精品久久久久婷婷软件| 国产午夜无码精品免费看| 亚洲精品国产字幕久久不卡| 野花香高清视频在线观看免费| 九月丁香婷婷亚洲综合色| 日韩精品在线免费观看| 亚洲日本中文字幕区| 18勿入网站免费永久| 亚洲性色AV日韩在线观看| 国产jizzjizz视频全部免费| 免费一级毛片在线播放放视频| 国产亚洲成归v人片在线观看| 中国精品一级毛片免费播放| 亚洲AV日韩AV天堂久久| 国产成人精品免费视频动漫| 亚洲中文无码永久免| 免费少妇a级毛片| 中文字幕久精品免费视频| 久久精品国产亚洲av麻豆色欲| 国产免费久久精品99re丫y| 久久亚洲国产成人影院| 亚洲精品视频在线看| 日韩中文字幕免费视频| 亚洲日韩一中文字暮| 亚洲天堂免费在线视频| 182tv免费观看在线视频| 亚洲国产欧洲综合997久久| 亚洲国产精品专区在线观看| 久久免费区一区二区三波多野| 亚洲国产精品综合一区在线| 免费a级毛片永久免费| 最好免费观看高清在线 | 亚洲区小说区图片区QVOD| 久久久精品2019免费观看| 亚洲av日韩综合一区久热| 亚洲熟妇中文字幕五十中出| 99爱在线精品免费观看| 一级做性色a爰片久久毛片免费|