生活随笔
收集整理的這篇文章主要介紹了
继承之后的使用注意事项_ArrayStoreException
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天在看Core In Java第五章節時,看到一個很感興趣的知識點,如下:?
在Java中,子類數組的引用可以轉換成超類數組的引用,而不需要采用強制轉換。但是,在超類數組的引用添加超類類型引用對象之后,就會出錯(ArrayStoreException)!代碼如下:?
Java代碼??
public?class?ArrayStoreExceptionTest?{????????????public?static?void?main(String[]?args)?{??????????Student[]?students?=?new?Student[10];??????????Person[]?persons?=?students;??????????????????Person?p1?=?new?ArrayStoreExceptionTest().new?Person(1001,?"Jessica");??????????persons[0]?=?p1;??????????students[0].setScore(200.1);??????}????????????class?Person?{??????????private?int?id;????????????private?String?name;????????????public?int?getId()?{??????????????return?id;??????????}????????????public?void?setId(int?id)?{??????????????this.id?=?id;??????????}????????????public?String?getName()?{??????????????return?name;??????????}????????????public?void?setName(String?name)?{??????????????this.name?=?name;??????????}????????????public?Person(int?id,?String?name)?{??????????????super();??????????????this.id?=?id;??????????????this.name?=?name;??????????}????????????public?Person()?{??????????????super();??????????}????????}????????????class?Student?extends?Person?{??????????private?double?score;????????????public?Student(int?id,?String?name,?double?score)?{??????????????super(id,?name);??????????????this.score?=?score;??????????}????????????public?double?getScore()?{??????????????return?score;??????????}????????????public?void?setScore(double?score)?{??????????????this.score?=?score;??????????}??????}??}??
以上代碼中,在main()方法中的代碼可以正常編譯通過,在運行時將拋出一個ArrayStoreException的運行時異常,原因是:由于persons超類數組對象的引用指向了students子類數組對象的引用,當為persons[0]添加父類對象引用時,將出現這樣的情況:JVM會進行檢查,由于引用的是子類數組類型對象引用,添加父類引用類型對象如果可以通過,在以下語句將出現更嚴重的異常!?
Java代碼??
students[0].setScore(200.1);??
所以,以上代碼塊執行之后,將拋出ArrayStoreException,這是一個運行時異常的子類異常!這是使用繼承之后的一種忌諱!一定要注意避免!?
Java代碼??
Exception?in?thread?"main"?java.lang.ArrayStoreException:????com.harry.coreInJava.chap5.ArrayStoreExceptionTest$Person????at?com.harry.coreInJava.chap5.ArrayStoreExceptionTest.main????(ArrayStoreExceptionTest.java:30)??
所以,如果定義的是一個數組類型對象,則有必要記住這個對象中可以添加什么類型的對象,而不是因為繼承關系而擾亂了我們的判斷力!
總結
以上是生活随笔為你收集整理的继承之后的使用注意事项_ArrayStoreException的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。