JAVA-初步认识-第十一章-异常-概述
一.
異常就是不正常,不正常在哪兒?之前在哪兒見過不正常?
舉一個之前的例子,來引入異常這個知識點。
截圖中的例子,是我們學習數組時所碰到的一個問題,超出數組的索引上限。控制臺上編譯是沒有問題的,但是運行出現了問題。
數組角標超出范圍的專業名稱是角標越界。控制臺上的英文顯示為ArrayIndexOutOfBoundsException,exception就是異常的意思,而且告訴我們3越界了。出現異常的文件名<ExceptionDemo.java:9>。
異常表現:在控制臺上可以看出異常表現。誰越界了,越界的位置在哪兒。
上面是一個最簡單的異常變現,現在我們可以得出一個基本的結論。
現在對程序做一個小的修改,添加了arr=null;編譯結果如下
DOS控制臺上的結果依舊顯示越界。這結果是沒有問題的,因為數組為空,輸出數組的第三個元素肯定是不可能存在的。
一定要記住,異常是在哪個時間段發生的。先不講述語法,先討論一下為什么會有異常的發生。
(視頻講到這里,整體的流程遵循的還是三問,是什么,為什么)
java當中為什么會有這個知識點呢?
無論是生活中,還是計算機當中,總會有一些異常誕生。通常我們會預先給出一些解決辦法。計算機是描述日常生活,生活中有異常也有解決辦法,計算機中同樣也有。
本來sleep方法中,正常來說輸入的都是正值,但是也不排除輸入的是負值,這樣就出現問題了,這種就是意外情況。
對于整個過程而言,會出現很多問題。那么就需要在程序中完善很多語句,對出現的異常情況進行維護。如果出現這樣的情況,該怎么解決。其中還有一點需要注意,對于函數聲明而言,返回值和返回值類型也是很重要的。這里對不同情況的處理,應該給出具體的返回值,因此,void應該要更換一下,應該是有返回值。
sleep()方法中的語句,是我們早期處理問題的一種方式。這種方法有一些劣勢。它的閱讀性不好。真實的情況中,處理的辦法語句有很多,一大堆。
為什么覺著這些代碼麻煩呢?因為方法體的眾多語句中,真正需要的就是一句(正常的流程代碼),System.out.println("我睡....."+num),其他的都是作為健壯性的代碼存在。
問題處理代碼和正常流程代碼結合的很緊密,這樣讀起代碼來很不舒服。光讀一個if,就讀了大半天。因此,在java中對這種情況進行了改良。
怎么改良呢?將這樣常見的情況問題,用面向對象的思考方式,對其進行了描述以及封裝。對于java而言,萬物即對象。如果我們程序中出現了問題,那么問題是不是對象?問題啥對象啊?問題對象有啥啊?仔細想一下,首先這個問題叫什么名字?緊跟著這個問題所涉及的具體信息,這個問題發生的位置。這些都是問題的特點。找到問題對象,就意味著這些信息都可以拿得到。這就是對象的封裝。因此,我們不再做這件事情了。java中按照面向對象的方法,對這些問題進行了封裝。以對象的形式來體現。
搞個類Futime,來描述時間為負數的情況下,我們該怎么去辦。if里面不用再搞一堆處理辦法,修改過后的程序如下:
設計成這樣的形式,就簡單多了。接下來的問題是,誰在調用sleep功能?調用者在調用這個功能時,當出現負時間的情況下,要給調用者反饋一個信息。當是負時間的時候,拋出一個問題對象。你告訴我小于0,我直接把封裝的對象告訴你。按照程序的流程來看,出問題了。出現了問題,拋出一個對象,最后又輸出睡覺了,這明顯是不對的。
c語言是通過if處理方法和輸出語句緊密結合在一起,而java是把問題封裝成對象,通過拋出的形式,讓調用者知道,這就是異常。
(我們在程序中并沒有書寫異常類,怎么dos運行的時候直接就拋出了異常類?是系統自帶的么?)
情況名稱不一樣,信息不一樣,位置不一樣都要進行單獨地描述。
總結:本節這是對異常進行了簡單描述。交代了異常類的定義,以及為什么會有異常類的出現。具體怎么操作異常類并沒有進行詳細地介紹。
?
轉載于:https://www.cnblogs.com/wsw-bk/p/7865001.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的JAVA-初步认识-第十一章-异常-概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gnuradio 初次使用
- 下一篇: 导入Scrapy 项目报错:no mod