日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java学习(三)面向对象异常

發(fā)布時(shí)間:2024/4/14 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java学习(三)面向对象异常 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

常:★★★★

異常:就是不正常。程序在運(yùn)行時(shí)出現(xiàn)的不正常情況。其實(shí)就是程序中出現(xiàn)的問(wèn)題。這個(gè)問(wèn)題按照面向?qū)ο笏枷脒M(jìn)行描述,并封裝成了對(duì)象。因?yàn)閱?wèn)題的產(chǎn)生有產(chǎn)生的原因、有問(wèn)題的名稱、有問(wèn)題的描述等多個(gè)屬性信息存在。當(dāng)出現(xiàn)多屬性信息最方便的方式就是將這些信息進(jìn)行封裝。異常就是java按照面向?qū)ο蟮乃枷雽?wèn)題進(jìn)行對(duì)象封裝。這樣就方便于操作問(wèn)題以及處理問(wèn)題。

?

出現(xiàn)的問(wèn)題有很多種,比如角標(biāo)越界,空指針等都是。就對(duì)這些問(wèn)題進(jìn)行分類。而且這些問(wèn)題都有共性內(nèi)容比如:每一個(gè)問(wèn)題都有名稱,同時(shí)還有問(wèn)題描述的信息,問(wèn)題出現(xiàn)的位置,所以可以不斷的向上抽取。形成了異常體系

?

--------java.lang.Throwable

Throwable可拋出的。

??? |--Error錯(cuò)誤,一般情況下,不編寫針對(duì)性的代碼進(jìn)行處理,通常是jvm發(fā)生的,需要對(duì)程序進(jìn)行修正。

??? |--Exception異常,可以有針對(duì)性的處理方式

?

無(wú)論是錯(cuò)誤還是異常,它們都有具體的子類體現(xiàn)每一個(gè)問(wèn)題,它們的子類都有一個(gè)共性,就是都以父類名才作為子類的后綴名

?

這個(gè)體系中的所有類和對(duì)象都具備一個(gè)獨(dú)有的特點(diǎn);就是可拋性。

可拋性的體現(xiàn):就是這個(gè)體系中的類和對(duì)象都可以被throws和throw兩個(gè)關(guān)鍵字所操作。

------------------------------------------------------

class? ExceptionDemo{

??? public static void main(String[] args) {

//????? byte[] buf = new byte[1024*1024*700];//java.lang.OutOfMemoryError內(nèi)存溢出錯(cuò)誤

??? }

}

------------------------------------------------------

在開發(fā)時(shí),如果定義功能時(shí),發(fā)現(xiàn)該功能會(huì)出現(xiàn)一些問(wèn)題,應(yīng)該將問(wèn)題在定義功能時(shí)標(biāo)示出來(lái),這樣調(diào)用者就可以在使用這個(gè)功能的時(shí)候,預(yù)先給出處理方式。

?

如何標(biāo)示呢?通過(guò)throws關(guān)鍵字完成,格式:throws 異常類名,異常類名...

這樣標(biāo)示后,調(diào)用者,在使用該功能時(shí),就必須要處理,否則編譯失敗。

?

處理方式有兩種:1、捕捉;2、拋出。

對(duì)于捕捉:java有針對(duì)性的語(yǔ)句塊進(jìn)行處理。

try {

??? 需要被檢測(cè)的代碼;

}

catch(異常類 變量名){

??? 異常處理代碼;

}

fianlly{

??? 一定會(huì)執(zhí)行的代碼;

}

--------------------------------------------------------

catch (Exception e) { //e用于接收try檢測(cè)到的異常對(duì)象。

??? System.out.println("message:"+e.getMessage());//獲取的是異常的信息。

??? System.out.println("toString:"+e.toString());//獲取的是異常的名字+異常的信息。

??? e.printStackTrace();//打印異常在堆棧中信息;異常名稱+異常信息+異常的位置。

}

---------------------------------------------------------

異常處理原則:功能拋出幾個(gè)異常,功能調(diào)用如果進(jìn)行try處理,需要與之對(duì)應(yīng)的catch處理代碼塊,這樣的處理有針對(duì)性,拋幾個(gè)就處理幾個(gè)。

?

特殊情況:try對(duì)應(yīng)多個(gè)catch時(shí),如果有父類的catch語(yǔ)句塊,一定要放在下面。

?

throw 和throws關(guān)鍵字的區(qū)別:

throw用于拋出異常對(duì)象,后面跟的是異常對(duì)象;throw用在函數(shù)內(nèi)。

throws用于拋出異常類,后面跟的異常類名,可以跟多個(gè),用逗號(hào)隔開。throws用在函數(shù)上。

?

通常情況:函數(shù)內(nèi)容如果有throw,拋出異常對(duì)象,并沒有進(jìn)行處理,那么函數(shù)上一定要聲明,否則編譯失敗。但是也有特殊情況。

?

異常分兩種:

1:編譯時(shí)被檢查的異常,只要是Exception及其子類都是編譯時(shí)被檢測(cè)的異常。

2:運(yùn)行時(shí)異常,其中Exception有一個(gè)特殊的子類RuntimeException,以及RuntimeException的子類是運(yùn)行異常,也就說(shuō)這個(gè)異常是編譯時(shí)不被檢查的異常。

?

編譯時(shí)被檢查的異常和運(yùn)行時(shí)異常的區(qū)別:

編譯被檢查的異常在函數(shù)內(nèi)被拋出,函數(shù)必須要聲明,否編譯失敗。

聲明的原因:是需要調(diào)用者對(duì)該異常進(jìn)行處理。

運(yùn)行時(shí)異常如果在函數(shù)內(nèi)被拋出,在函數(shù)上不需要聲明。

不聲明的原因:不需要調(diào)用者處理,運(yùn)行時(shí)異常發(fā)生,已經(jīng)無(wú)法再讓程序繼續(xù)運(yùn)行,所以,不讓調(diào)用處理的,直接讓程序停止,由調(diào)用者對(duì)代碼進(jìn)行修正。

?

定義異常處理時(shí),什么時(shí)候定義try,什么時(shí)候定義throws呢?

功能內(nèi)部如果出現(xiàn)異常,如果內(nèi)部可以處理,就用try;

如果功能內(nèi)部處理不了,就必須聲明出來(lái),讓調(diào)用者處理。

?

自定義異常:當(dāng)開發(fā)時(shí),項(xiàng)目中出現(xiàn)了java中沒有定義過(guò)的問(wèn)題時(shí),這時(shí)就需要我們按照java異常建立思想,將項(xiàng)目的中的特有問(wèn)題也進(jìn)行對(duì)象的封裝。這個(gè)異常,稱為自定義異常。

?

對(duì)于除法運(yùn)算,0作為除數(shù)是不可以的。java中對(duì)這種問(wèn)題用ArithmeticException類進(jìn)行描述。對(duì)于這個(gè)功能,在我們項(xiàng)目中,除數(shù)除了不可以為0外,還不可以為負(fù)數(shù)。可是負(fù)數(shù)的部分java并沒有針對(duì)描述。所以我們就需要自定義這個(gè)異常。

?

自定義異常的步驟:

1:定義一個(gè)子類繼承Exception或RuntimeException,讓該類具備可拋性。

2:通過(guò)throw 或者throws進(jìn)行操作。

?

異常的轉(zhuǎn)換思想:當(dāng)出現(xiàn)的異常是調(diào)用者處理不了的,就需要將此異常轉(zhuǎn)換為一個(gè)調(diào)用者可以處理的異常拋出。

?

try? catch? finally的幾種結(jié)合方式:

?

2,

try

catch

?

?

?

3,

try

finally

?

?

1,

try

catch

finally

?

這種情況,如果出現(xiàn)異常,并不處理,但是資源一定關(guān)閉,所以try? finally集合只為關(guān)閉資源

記住:finally很有用,主要用戶關(guān)閉資源。無(wú)論是否發(fā)生異常,資源都必須進(jìn)行關(guān)閉。

System.exit(0); //退出jvm,只有這種情況finally不執(zhí)行。

?

當(dāng)異常出現(xiàn)后,在子父類進(jìn)行覆蓋時(shí),有了一些新的特點(diǎn):

1:當(dāng)子類覆蓋父類的方法時(shí),如果父類的方法拋出了異常,那么子類的方法要么不拋出異常要么拋出父類異常或者該異常的子類,不能拋出其他異常。

2:如果父類拋出了多個(gè)異常,那么子類在覆蓋時(shí)只能拋出父類的異常的子集。

?

注意:

如果父類或者接口中的方法沒有拋出過(guò)異常,那么子類是不可以拋出異常的,如果子類的覆蓋的方法中出現(xiàn)了異常,只能try不能throws。

如果這個(gè)異常子類無(wú)法處理,已經(jīng)影響了子類方法的具體運(yùn)算,這時(shí)可以在子類方法中,通過(guò)throw拋出RuntimeException異常或者其子類,這樣,子類的方法上是不需要throws聲明的。

?

常見異常:

1、腳標(biāo)越界異常(IndexOutOfBoundsException)包括數(shù)組、字符串;

空指針異常(NullPointerException)

2、類型轉(zhuǎn)換異常:ClassCastException

3、沒有這個(gè)元素異常:NullPointerException

4、不支持操作異常;

異常要盡量避免,如果避免不了,需要預(yù)先給出處理方式。比如家庭備藥,比如滅火器。

-----------------------------------------------------------------------------------------------

包:定義包用package關(guān)鍵字。

1:對(duì)類文件進(jìn)行分類管理。

2:給類文件提供多層名稱空間。

?

如果生成的包不在當(dāng)前目錄下,需要最好執(zhí)行classpath,將包所在父目錄定義到classpath變量中即可。

一般在定義包名時(shí),因?yàn)榘某霈F(xiàn)是為了區(qū)分重名的類。所以包名要盡量唯一。怎么保證唯一性呢?可以使用url域名來(lái)進(jìn)行包名稱的定義。

package pack;//定義了一個(gè)包,名稱為pack。 注意:包名的寫法規(guī)范:所有字母都小寫。

//package cn.itcast.pack.demo;

?

類的全名稱是 包名.類名

??? 編譯命令:javac –d 位置(.當(dāng)前路徑) java源文件 (就可以自動(dòng)生成包)

?

包是一種封裝形式,用于封裝類,想要被包以外的程序訪問(wèn),該類必須public;

類中的成員,如果被包以外訪問(wèn),也必須public;

?

包與包之間訪問(wèn)可以使用的權(quán)限有兩種:

1:public

2:protected:只能是不同包中的子類可以使用的權(quán)限。

?

總結(jié)java中的四種權(quán)限:

??? 范圍?????? public? protected(保護(hù))?? ??? default(默認(rèn))?????? private

同一個(gè)類中?????? ok???????????? ok????????????? ok????????? ??? ok

同一包中??????? ok???????????? ok????????????? ok?????

子類??????????? ok????????

不同包中???????? ok???????????? ok

-----------------------------------------------------------------------------------------------

Import - 導(dǎo)入:類名稱變長(zhǎng),寫起來(lái)很麻煩。為了簡(jiǎn)化,使用了一個(gè)關(guān)鍵字:import,可以使用這個(gè)關(guān)鍵字導(dǎo)入指定包中的類。記住:實(shí)際開發(fā)時(shí),到的哪個(gè)類就導(dǎo)入哪個(gè)類,不建議使用*.

import packa.*;//這個(gè)僅僅是導(dǎo)入了packa當(dāng)前目錄下的所有的類。不包含子包。

import packa.abc.*;//導(dǎo)入了packa包中的子包abc下的當(dāng)前的所有類。

?

如果導(dǎo)入的兩個(gè)包中存在著相同名稱的類。這時(shí)如果用到該類,必須在代碼中指定包名。

?

常見的軟件包:

java.lang : language java的核心包,Object System? String Throwable jdk1.2版本后,該包中的類自動(dòng)被導(dǎo)入。

java.awt : 定義的都是用于java圖形界面開發(fā)的對(duì)象。

javax.swing: 提供所有的windows桌面應(yīng)用程序包括的控件,比如:Frame , Dialog, Table, List 等等,就是java的圖形界面庫(kù)。

java.net : 用于java網(wǎng)絡(luò)編程方面的對(duì)象都在該包中。

java.io : input? output 用于操作設(shè)備上數(shù)據(jù)的對(duì)象都在該包中。比如:讀取硬盤數(shù)據(jù),往硬盤寫入數(shù)據(jù)。

java.util : java的工具包,時(shí)間對(duì)象,集合框架。

java.applet: application+let 客戶端java小程序。server+let? -->? servlet 服務(wù)端java小程序。

?

jar java的壓縮包,主要用于存儲(chǔ)類文件,或者配置文件等。

命令格式:jar –cf 包名.jar 包目錄

?? 解壓縮:jar –xvf 包名.jar

?將jar包目錄列表重定向到一個(gè)文件中:jar –tf 包名.jar >c:\1.txt

轉(zhuǎn)載于:https://www.cnblogs.com/cflhh/p/7846655.html

超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的Java学习(三)面向对象异常的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。