classcastexception是什么原因造成的?
ClassCastException是JVM在檢測到兩個類型間轉換不兼容時引發的運行時異常。此類錯誤通常會終止用戶請求。在執行任何子系統的應用程序代碼時都有可能發生ClassCastException異常。
通過轉換,可以指示Java編譯器將給定類型的變量作為另一種變量來處理。對基礎類型和用戶定義類型都可以轉換。Java語言規范定義了允許的轉換,其中大多數可在編譯時進行驗證。
不過,某些轉換還需要運行時驗證。如果在此運行時驗證過程中檢測到不兼容,JVM就會引發ClassCastException異常。
1.一個類是數字類,而由于誤操作,錯誤的將數字類向數字類轉換改寫成了數字類向字符串類的轉換,從而產生了異常。
2.大部分原因是因為強制轉換或者是SQL映射時發生了這個異常。
是因為sql映射出現了問題:
因為sql中返回的是一個 list的實體對象,而接收的則是一個List類型的參數。
怎么解決?
首先打開我們的開發工具myeclispe,然后點擊File,選擇New,在點擊Java Project選項來新建個java工程項目。
這里我新建了三個java類。一個是BaiDu類作為父類,一個JingYan類作為子類。還有一個AesTest類是來測試我們結果的。
在BaiDu.java父類中,就定義一個name屬性。在JingYan.java類里,我們是先繼承了BaiDu這個類,然后又定義了個Cname屬性。
代碼如下:
public class BaiDu {
String name = "baidu";
}
public class JingYan extends BaiDu {
String Cname = "jingyan";
}
在AesTest.java類里面寫上測試代碼,代碼如下:
public static void main(String[] args) {
BaiDu baidu = new BaiDu();
JingYan jingyan = new JingYan();
jingyan = (JingYan) baidu;
System.out.println(jingyan);
}
這里注意,把定義的baidu賦值給jingyan,由于類型不一致,所以要進行類型強制轉化,用JingYan這個類來進行強制轉換。
寫好后,就可以執行這段代碼了,執行發現報錯java.lang.ClassCastException。報錯的意思就是強制類型轉換異常。
接著,我們在修改下代碼,代碼如下:
public static void main(String[] args) {
BaiDu baidu = new BaiDu();
JingYan jingyan = new JingYan();
baidu = (BaiDu)jingyan;
System.out.println(baidu);
}
這里是把jingyan賦值給baidu,由于類型不一致,所以要進行類型強制轉化,用BaiDu這個類來進行強制轉換,修改好后,再來執行,發現此時可以正常運行,輸出想要的結果。
出現java.lang.ClassCastExceptio錯誤是指類型強制轉換出錯了。當我們用子類對象去強制轉換父類對象就會報錯,或者使用子類對象 = 父類對象,同樣會拋出java.lang.ClassCastException。
例如:jingyan = (JingYan) baidu;或者jingyan=baidu;
都會報錯。
關鍵詞: classcastexception classcastexception是什么原因造成的 classcastexception怎么解決 JVM檢測