Java提高篇——Java中的異常處理(絕對詳細,建議收藏)

2020-09-15 Java瘋魔者

今天,小編來和大家聊聊Java中的異常該怎麼處理

異常的概念

異常是程序中的一些錯誤,但並不是所有的錯誤都是異常,並且錯誤有時候是可以避免的。

比如說,你的代碼少了一個分號,那麼運行出來結果是提示是錯誤java.lang.Error;如果你用System.out.println(11/0),那麼你是因為你用0做了除數,會拋出java.lang.ArithmeticException的異常。

異常發生的原因有很多,通常包含以下幾大類:

用戶輸入了非法數據。

要打開的文件不存在。

網絡通信時連接中斷,或者JVM內存溢出。

這些異常有的是因為用戶錯誤引起,有的是程序錯誤引起的,還有其它一些是因為物理錯誤引起的。

要理解Java異常處理是如何工作的,你需要掌握以下三種類型的異常:

檢查性異常:最具代表的檢查性異常是用戶錯誤或問題引起的異常,這是程式設計師無法預見的。例如要打開一個不存在文件時,一個異常就發生了,這些異常在編譯時不能被簡單地忽略。

運行時異常: 運行時異常是可能被程式設計師避免的異常。與檢查性異常相反,運行時異常可以在編譯時被忽略。

錯誤: 錯誤不是異常,而是脫離程式設計師控制的問題。錯誤在代碼中通常被忽略。例如,當棧溢出時,一個錯誤就發生了,它們在編譯也檢查不到的。


異常指不期而至的各種狀況,如:文件找不到、網絡連接失敗、除0操作、非法參數等。異常是一個事件,它發生在程序運行期間,幹擾了正常的指令流程。

Java語言在設計的當初就考慮到這些問題,提出異常處理的框架的方案,所有的異常都可以用一個異常類來表示,不同類型的異常對應不同的子類異常(目前我們所說的異常包括錯誤概念),定義異常處理的規範,在JDK1.4版本以後增加了異常鏈機制,從而便於跟蹤異常。

Java異常是一個描述在代碼段中發生異常的對象,當發生異常情況時,一個代表該異常的對象被創建並且在導致該異常的方法中被拋出,而該方法可以選擇自己處理異常或者傳遞該異常。

異常的體系結構

Java把異常當作對象來處理,並定義一個基類java.lang.Throwable作為所有異常的超類。

在Java API中已經定義了許多異常類,這些異常類分為兩大類,錯誤Error和異常Exception。

Java異常層次結構圖如下圖所示:

從圖中可以看出所有異常類型都是內置類Throwable的子類,因而Throwable在異常類的層次結構的頂層。

接下來Throwable分成了兩個不同的分支,一個分支是Error,它表示不希望被程序捕獲或者是程序無法處理的錯誤。另一個分支是Exception,它表示用戶程序可能捕捉的異常情況或者說是程序可以處理的異常。其中異常類Exception又分為運行時異常(RuntimeException)和非運行時異常。

Java異常又可以分為不受檢查異常(Unchecked Exception)和檢查異常(Checked Exceptin)。


下面將詳細講述這些異常之間的區別與聯繫:

Error:Error類對象由 Java 虛擬機生成並拋出,大多數錯誤與代碼編寫者所執行的操作無關。例如,Java虛擬機運行錯誤(Virtual MachineError),當JVM不再有繼續執行操作所需的內存資源時,將出現 OutOfMemoryError。這些異常發生時,Java虛擬機(JVM)一般會選擇線程終止;還有發生在虛擬機試圖執行應用時,如類定義錯誤(NoClassDefFoundError)、連結錯誤(LinkageError)。這些錯誤是不可查的,因為它們在應用程式的控制和處理能力之 外,而且絕大多數是程序運行時不允許出現的狀況。對於設計合理的應用程式來說,即使確實發生了錯誤,本質上也不應該試圖去處理它所引起的異常狀況。在Java中,錯誤通常是使用Error的子類描述。

Exception:在Exception分支中有一個重要的子類RuntimeException(運行時異常),該類型的異常自動為你所編寫的程序定義ArrayIndexOutOfBoundsException(數組下標越界)、NullPointerException(空指針異常)、ArithmeticException(算術異常)、MissingResourceException(丟失資源)、ClassNotFoundException(找不到類)等異常,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。這些異常一般是由程序邏輯錯誤引起的,程序應該從邏輯角度儘可能避免這類異常的發生;而RuntimeException之外的異常我們統稱為非運行時異常,類型上屬於Exception類及其子類,從程序語法角度講是必須進行處理的異常,如果不處理,程序就不能編譯通過。如IOException、SQLException等以及用戶自定義的Exception異常,一般情況下不自定義檢查異常。

注意

Error和Exception的區別:Error通常是災難性的致命的錯誤,是程序無法控制和處理的,當出現這些異常時,Java虛擬機(JVM)一般會選擇終止線程;Exception通常情況下是可以被程序處理的,並且在程序中應該儘可能的去處理這些異常。

檢查異常:在正確的程序運行過程中,很容易出現的、情理可容的異常狀況,在一定程度上這種異常的發生是可以預測的,並且一旦發生該種異常,就必須採取某種方式進行處理。

提示

除了RuntimeException及其子類以外,其他的Exception類及其子類都屬於檢查異常,當程序中可能出現這類異常,要麼使用try-catch語句進行捕獲,要麼用throws子句拋出,否則編譯無法通過。

不受檢查異常:包括RuntimeException及其子類和Error。

提示

不受檢查異常為編譯器不要求強制處理的異常,檢查異常則是編譯器要求必須處置的異常。

Java 異常的處理機制

Java的異常處理本質上是拋出異常和捕獲異常。

拋出異常:要理解拋出異常,首先要明白什麼是異常情形(exception condition),它是指阻止當前方法或作用域繼續執行的問題。其次把異常情形和普通問題相區分,普通問題是指在當前環境下能得到足夠的信息,總能處理這個錯誤。對於異常情形,已經無法繼續下去了,因為在當前環境下無法獲得必要的信息來解決問題,你所能做的就是從當前環境中跳出,並把問題提交給上一級環境,這就是拋出異常時所發生的事情。拋出異常後,會有幾件事隨之發生。首先,是像創建普通的java對象一樣將使用new在堆上創建一個異常對象;然後,當前的執行路徑(已經無法繼續下去了)被終止,並且從當前環境中彈出對異常對象的引用。此時,異常處理機制接管程序,並開始尋找一個恰當的地方繼續執行程序,這個恰當的地方就是異常處理程序或者異常處理器,它的任務是將程序從錯誤狀態中恢復,以使程序要麼換一種方式運行,要麼繼續運行下去。

舉個簡單的例子,假使我們創建了一個學生對象Student的一個引用stu,在調用的時候可能還沒有初始化。所以在使用這個對象引用調用其他方法之前,要先對它進行檢查,可以創建一個代表錯誤信息的對象,並且將它從當前環境中拋出,這樣就把錯誤信息傳播到更大的環境中。

if(stu == null){throw new NullPointerException();}

這就拋出了異常,它將在其他的地方得到執行或者處理,具體是哪個地方後面將很快介紹,代碼中出現的 throw 是一個關鍵字,暫時先不做過多講解,後面會詳細講解。

捕獲異常:在方法拋出異常之後,運行時系統將轉為尋找合適的異常處理器(exception handler)。潛在的異常處理器是異常發生時依次存留在調用棧中的方法的集合。當異常處理器所能處理的異常類型與方法拋出的異常類型相符時,即為合適的異常處理器。運行時系統從發生異常的方法開始,依次回查調用棧中的方法,直至找到含有合適異常處理器的方法並執行。當運行時系統遍歷調用棧而未找到合適的異常處理器,則運行時系統終止。同時,意味著Java程序的終止。

提示

對於運行時異常、錯誤和檢查異常,Java技術所要求的異常處理方式有所不同。

由於運行時異常及其子類的不可查性,為了更合理、更容易地實現應用程式,Java規定,運行時異常將由Java運行時系統自動拋出,允許應用程式忽略運行時異常。

對於方法運行中可能出現的Error,當運行方法不予捕捉時,Java允許該方法不做任何拋出聲明。因為,大多數Error異常屬於永遠不能被允許發生的狀況,也屬於合理的應用程式不該捕捉的異常。

對於所有的檢查異常,Java規定:一個方法必須捕捉,或者聲明拋出方法之外。也就是說,當一個方法選擇不捕捉檢查異常時,它必須聲明將拋出異常。

Java異常處理涉及到五個關鍵字,分別是:try、catch、finally、throw、throws。下面將驟一介紹,通過認識這五個關鍵字,掌握基本異常處理知識。

try -- 用於監聽。將要被監聽的代碼(可能拋出異常的代碼)放在try語句塊之內,當try語句塊內發生異常時,異常就被拋出。

catch -- 用於捕獲異常。catch用來捕獲try語句塊中發生的異常。

finally -- finally語句塊總是會被執行。它主要用於回收在try塊裡打開的物理資源(如資料庫連接、網絡連接和磁碟文件)。只有finally塊,執行完成之後,才會回來執行try或者catch塊中的return或者throw語句,如果finally中使用了return或者throw等終止方法的語句,則就不會跳回執行,直接停止。

throw -- 用於拋出異常。

throws -- 用在方法籤名中,用於聲明該方法可能拋出的異常。

異常處理的基本語法

1. try-catch

try{//code that might generate exceptions}catch(Exception e){//the code of handling exception1}catch(Exception e){//the code of handling exception2}

要明白異常捕獲,還要理解監控區域(guarded region)的概念。它是一段可能產生異常的代碼,並且後面跟著處理這些異常的代碼。

因而可知,上述try-catch所描述的即是監控區域,關鍵詞try後的一對大括號將一塊可能發生異常的代碼包起來,即為監控區域。Java方法在運行過程中發生了異常,則創建異常對象。將異常拋出監控區域之外,由Java運行時系統負責尋找匹配的catch子句來捕獲異常。若有一個catch語句匹配到了,則執行該catch塊中的異常處理代碼,就不再嘗試匹配別的catch塊了。

匹配的原則是:如果拋出的異常對象屬於catch子句的異常類,或者屬於該異常類的子類,則認為生成的異常對象與catch塊捕獲的異常類型相匹配。

舉個例子算術異常:

public class TestException {public static void main(String[] args) {int a = 1;int b = 0;try { // try監控區域if (b == 0) throw new ArithmeticException(); // 通過throw語句拋出異常System.out.println(&34; + a / b);System.out.println(&34;);}catch (ArithmeticException e) { // catch捕捉異常System.out.println(&34;);}System.out.println(&34;);}}

運行結果:

D:\java>java TestException程序出現異常,變量b不能為0!程序正常結束。

顯示一個異常的描述,Throwable重載了toString()方法(由Object定義),所以它將返回一個包含異常描述的字符串。例如,將前面的catch塊重寫成:

catch (ArithmeticException e) { // catch捕捉異常System.out.println(&34;+e);}

結果:

D:\java>java TestException程序出現異常java.lang.ArithmeticException程序正常結束。

根據前面講述的,算術異常屬於運行時異常,因而實際上該異常不需要程序拋出,運行時系統自動拋出,將例子改為如下:

public class TestException {public static void main(String[] args) {int a = 1;int b = 0;System.out.println(&34; + a / b);System.out.println(&34;);}}

結果:

D:\java>java TestExceptionException in thread &34; java.lang.ArithmeticException: / by zeroat TestException.main(TestException.java:7)

使用多重的catch語句:很多情況下,由單個的代碼段可能引起多個異常。處理這種情況,我們需要定義兩個或者更多的catch子句,每個子句捕獲一種類型的異常,當異常被引發時,每個catch子句被依次檢查,第一個匹配異常類型的子句執行,當一個catch子句執行以後,其他的子句將被旁路。

編寫多種catch語句塊注意事項:

順序問題:先小後大,即先子類後父類

Java通過異常類描述異常類型。對於有多個catch子句的異常程序而言,應該儘量將捕獲底層異常類的catch子句放在前面,同時儘量將捕獲相對高層的異常類的catch子句放在後面。否則,捕獲底層異常類的catch子句將可能會被屏蔽。

RuntimeException異常類包括運行時各種常見的異常,ArithmeticException類和ArrayIndexOutOfBoundsException類都是它的子類。因此,RuntimeException異常類的catch子句應該放在最後面,否則可能會屏蔽其後的特定異常處理或引起編譯錯誤。

嵌套try語句:try語句可以被嵌套。也就是說,一個try語句可以在另一個try塊的內部。每次進入try語句,異常的前後關係都會被推入堆棧。如果一個內部的try語句不含特殊異常的catch處理程序,堆棧將彈出,下一個try語句的catch處理程序將檢查是否與之匹配。這個過程將繼續直到一個catch語句被匹配成功,或者是直到所有的嵌套try語句被檢查完畢。如果沒有catch語句匹配,Java運行時系統將處理這個異常。

例如:

class NestTry{public static void main(String[] args){try{int a = args.length;int b = 42 / a;System.out.println(&34;+ a);try{if(a == 1){a = a/(a-a);}if(a == 2){int c[] = {1};c[42] =99;}}catch(ArrayIndexOutOfBoundsException e){System.out.println(&34;+e);}}catch(ArithmeticException e){System.out.println(&34;+ e);}}}

正如程序中所顯示的,該程序在一個try塊中嵌套了另一個try塊。程序工作如下:當你在沒有命令行參數的情況下執行該程序,外面的try塊將產生一個被0除的異常。程序在有一個命令行參數條件下執行,由嵌套的try塊產生一個被0除的異常,由於內部的catch塊不匹配這個異常,它將把異常傳給外部的try塊,在外部異常被處理。如果你在具有兩個命令行參數的條件下執行該程序,將由內部try塊產生一個數組邊界異常。

結果:

D:\java>javac estTry.javaD:\java>>java NestTryDivide by 0 java.lang.ArithmeticExceptio: / by zeroD:\java>java NestTry onea = 1Divide by 0java.lang.ArithmeticException: / by zeroD:\java>java NestTry one twoa = 2ArrayIndexOutOfBounds :java.lang.ArrayIndexOutOfBoundsException: 42

注意

當有方法調用時,try語句的嵌套可以很隱蔽的發生。例如,我們可以將對方法的調用放在一個try塊中。在該方法的內部,有另一個try語句。在這種情況下,方法內部的try仍然是嵌套在外部調用該方法的try塊中的。下面我們將對上述例子進行修改,嵌套的try塊移到方法nesttry()的內部:

class NestTry{static void nesttry(int a){try{if(a == 1){a = a/(a-a);}if(a == 2){int c[] = {1};c[42] =99;}}catch(ArrayIndexOutOfBoundsException e){System.out.println(&34;+e);}}public static void main(String[] args){try{int a = args.length;int b = 42 / a;System.out.println(&34;+ a);nesttry(a);}catch(ArithmeticException e){System.out.println(&34;+ e);}}}

結果輸出與前面例子一致:

D:\java>javac NestTry.javaD:\java>java NestTryDivide by 0java.lang.ArithmeticException: / by zeroD:\java>java NestTry onea = 1Divide by 0java.lang.ArithmeticException: / by zeroD:\java>java NestTry one twoa = 2ArrayIndexOutOfBounds :java.lang.ArrayIndexOutOfBoundsException: 42}

2. throw

到目前為止,我們只是獲取了被Java運行時系統引發的異常。然而,我們還可以用throw語句拋出明確的異常。Throw的語法形式如下:

throw ThrowableInstance;

這裡的ThrowableInstance一定是Throwable類類型或者Throwable子類類型的一個對象。簡單的數據類型,例如int,char,以及非Throwable類,例如String或Object,不能用作異常。有兩種方法可以獲取Throwable對象:在catch子句中使用參數或者使用new操作符創建。

程序執行完throw語句之後立即停止;throw後面的任何語句不被執行,最鄰近的try塊用來檢查它是否含有一個與異常類型匹配的catch語句。如果發現了匹配的塊,控制轉向該語句;如果沒有發現,以包圍的try塊來檢查,以此類推。如果沒有發現匹配的catch塊,默認異常處理程序中斷程序的執行並且列印堆棧軌跡。

例如:

class TestThrow{static void proc(){try{throw new NullPointerException(&34;);}catch(NullPointerException e){System.out.println(&34;);throw e;}}public static void main(String [] args){try{proc();}catch(NullPointerException e){System.out.println(&34;+e);}}}

結果:

D:\java>java TestThrowCaught inside procRecaught: java.lang.NullPointerException: demo

該程序兩次處理相同的錯誤,首先,main()方法設立了一個異常關係然後調用proc()。proc()方法設立了另一個異常處理關係並且立即拋出一個NullPointerException實例,NullPointerException在main()中被再次捕獲。

該程序闡述了怎樣創建Java的標準異常對象,特別注意這一行:

throw new NullPointerException(&34;);

此處new用來構造一個NullPointerException實例,所有的Java內置的運行時異常有兩個構造方法:一個沒有參數,一個帶有一個字符串參數。當用第二種形式時,參數指定描述異常的字符串。如果對象用作print()或者println()的參數時,該字符串被顯示。這同樣可以通過調用getMessage()來實現,getMessage()是由Throwable定義的。

3. throws

如果一個方法可以導致一個異常但不處理它,它必須指定這種行為以使方法的調用者可以保護它們自己而不發生異常。要做到這點,我們可以在方法聲明中包含一個throws子句。一個throws子句列舉了一個方法可能引發的所有異常類型。這對於除了Error或RuntimeException及它們子類以外類型的所有異常是必要的。一個方法可以引發的所有其他類型的異常必須在throws子句中聲明,否則會導致編譯錯誤。

下面是throws子句的方法聲明的通用形式:

public void info() throws Exception{//body of method}

Exception 是該方法可能引發的所有的異常,也可以是異常列表,中間以逗號隔開。

例如:

class TestThrows{static void throw1(){System.out.println(&34;);throw new IllegalAccessException(&34;);}public static void main(String[] args){throw1();}}

上述例子中有兩個地方存在錯誤,你能看出來嗎?

該例子中存在兩個錯誤,首先,throw1()方法不想處理所導致的異常,因而它必須聲明throws子句來列舉可能引發的異常即IllegalAccessException;其次,main()方法必須定義try/catch語句來捕獲該異常。

正確例子如下:

class TestThrows{static void throw1() throws IllegalAccessException {System.out.println(&34;);throw new IllegalAccessException(&34;);}public static void main(String[] args){try {throw1();}catch(IllegalAccessException e ){System.out.println(&34; + e);}}}

Throws拋出異常的規則:

如果是不受檢查異常(unchecked exception),即Error、RuntimeException或它們的子類,那麼可以不使用throws關鍵字來聲明要拋出的異常,編譯仍能順利通過,但在運行時會被系統拋出。

必須聲明方法可拋出的任何檢查異常(checked exception)。即如果一個方法可能出現受可查異常,要麼用try-catch語句捕獲,要麼用throws子句聲明將它拋出,否則會導致編譯錯誤

僅當拋出了異常,該方法的調用者才必須處理或者重新拋出該異常。當方法的調用者無力處理該異常的時候,應該繼續拋出,而不是囫圇吞棗。

調用方法必須遵循任何可查異常的處理和聲明規則。若覆蓋一個方法,則不能聲明與覆蓋方法不同的異常。聲明的任何異常必須是被覆蓋方法所聲明異常的同類或子類。

4. finally

當異常發生時,通常方法的執行將做一個陡峭的非線性的轉向,它甚至會過早的導致方法返回。例如,如果一個方法打開了一個文件並關閉,然後退出,你不希望關閉文件的代碼被異常處理機制旁路。finally關鍵字為處理這種意外而設計。

finally創建的代碼塊在try/catch塊完成之後另一個try/catch出現之前執行。finally塊無論有沒有異常拋出都會執行。如果拋出異常,即使沒有catch子句匹配,finally也會執行。一個方法將從一個try/catch塊返回到調用程序的任何時候,經過一個未捕獲的異常或者是一個明確的返回語句,finally子句在方法返回之前仍將執行。這在關閉文件句柄和釋放任何在方法開始時被分配的其他資源是很有用。

finally子句是可選項,可以有也可以無,但是每個try語句至少需要一個catch或者finally子句。

class TestFinally{static void proc1(){try{System.out.println(&34;);throw new RuntimeException(&34;);}finally{System.out.println(&39;s finally&34;inside proc2&34;proc2&34;);}}static void proc3(){try{System.out.println(&34;);}finally{System.out.println(&39;s finally&34;Exception caught&39;s finallyException caughtinside proc2proc2&39;s finally

註:如果finally塊與一個try聯合使用,finally塊將在try結束之前執行。

問題擴展(面試題):

1、try{} 裡有一個 return 語句,那麼緊跟在這個 try 後的 finally{} 裡的 code 會不會被執行,什麼時候被執行,在 return 前還是後?

答案:會執行,在方法返回調用者前執行。

注意:在finally中改變返回值的做法是不好的,因為如果存在finally代碼塊,try中的return語句不會立馬返回調用者,而是記錄下返回值待finally代碼塊執行完畢之後再向調用者返回其值,然後如果在finally中修改了返回值,就會返回修改後的值。顯然,在finally中返回或者修改返回值會對程序造成很大的困擾,C34;MyException [&34;]&34;Called compute(&34;)&34;Normal exit!&34;Caught " + me);}}}

該例子完全按照上述步驟。

運行結果如下:D:\java>java TestMyExceptionCalled compute(1)Normal exit!Called compute(20)Caught MyException [20]

總結

相關焦點

  • java中的try是什麼?|java的異常處理類型
    1、try-是java異常處理類型中的一個。那麼,異常處理又是啥?2、異常-說的就是編寫程序時出現的錯誤。>3、異常處理-是java為異常提供了統一的程序出口,並且聲明了很多異常類,對每種異常類對應的處理方法;(簡單來說就是:在程序出現錯誤時,它能讓程序繼續往我們設定好的方向運行)。
  • 如何優化Java程序設計和編碼提高性能(建議收藏)
    在JAVA核心API中,有許多應用final的例子,例如java.lang.String,為String類指定final防止了使用者覆蓋length方法。另外,如果一個類是final的,則該類所有方法都是final的。java編譯器會尋找機會內聯(inline)所有的final方法(這和具體的編譯器實現有關)。此舉能夠使性能平均提高50%。
  • Java之異常處理
    異常的定義異常:在Java語言中,將程序執行中發生的不正常情況稱為「異常」。 (開發過程中的語法錯誤和邏輯錯誤不是異常)1.關於異常對象的產生:① 系統自動生成的異常對象② 手動的生成一個異常對象,並拋出(throw)過程二:&34;:可以理解為異常的處理方式:① try-catch-finally ② throws2.異常處理方式一:try-catch-finally
  • Java中異常處理的9個最佳實踐
    異常處理當異常被拋出時,應用程式的流程就會被中斷,如果沒能及時處理異常,應用程式將崩潰。用戶將看到異常信息,但那些信息大多他們是看不懂的,這將是一個很糟糕的用戶體驗,實際上異常信息還可以包裝成非常友好的提示。所以必須進行異常處理,哪怕是為了提高用戶體驗、記錄問題日誌、優雅地退出應用程式等。
  • Java中最正確的異常處理方式
    比如說,你的代碼少了一個分號,那麼運行出來結果是提示是錯誤 java.lang.Error ;如果你用 System.out.println(11/0) ,那麼你是因為你用0做了除數,會拋出 java.lang.ArithmeticException 的異常。
  • 處理Java異常的9個最佳實踐
    3.記錄指定異常每當你在你的方法籤名中指定一個異常時,你也應該在Javadoc中記錄它。這與之前的最佳實踐具有相同的目標:提供調用者儘可能多的信息,以便他可以避免或處理異常情況。因此,請確保向Javadoc添加@throws聲明並描述可能導致異常的情況。
  • java中的異常和日誌
    ,但隱式(即用變量表示下標)調用就經常出錯了,還有一種情況,是程序中定義的數組的長度是通過某些特定方法決定的,不是事先聲明的,這個時候,最好先查看一下數組的length,以免出現這個異常。當向數組中存放非數組聲明類型對象時拋出。java.lang.ClassCastException類造型異常。假設有類A和B(A不是B的父類或子類),O是A的實例,那麼當強制將O構造為類B的實例時拋出該異常。該異常經常被稱為強制類型轉換異常。java.lang.ClassNotFoundException找不到類異常。
  • java NullPointerException異常處理
    java語言與其他程式語言不同,它有嚴格的異常處理機制,如果需要拋出異常的代碼塊中沒有捕獲異常,程序將不會成功編譯,換言之:未使用異常捕獲、異常捕獲方式不正確等,都將導致代碼不能被jvm編譯。java標準庫,內建了大量的異常處理類,這些類以Throwable 設計為最頂層類。
  • 跟我學java編程—Java顯示異常信息與異常分類
    如何顯示異常信息前面介紹了各種異常類及異常語句的用法。在實際編程過程中,還需要顯示導致異常出現的信息,方便程式設計師根據給出的異常信息查找程序錯誤。異常類提供了輸出異常信息的兩個方法:getMessage方法和printStackTrace方法。getMessage方法用於獲取異常的詳細消息字符串。
  • Java學習(十二): 異常處理
    異常概述Java的異常處理機制也秉承著面向對象的基本思想。在Java中,所有的異常都是以類的類型存在。除了內置的異常類之外,Java也可以自定義異常類。此外,Java的異常處理機制也允許自定義拋出異常。
  • Java - 註解(Annotation)
    -----------------------------------------Java 註解(Annotation)又稱 Java 標註,是 JDK5.0 引入的一種注釋機制。>enum ElementType { TYPE, /* 類、接口(包括注釋類型)或枚舉聲明 */ FIELD, /* 欄位聲明(包括枚舉常量) */ METHOD, /* 方法聲明 */ PARAMETER, /* 參數聲明 */ CONSTRUCTOR, /*
  • java安全編碼指南之:異常處理
    簡介異常是java程式設計師無法避免的一個話題,我們會有JVM自己的異常也有應用程式的異常,對於不同的異常,我們的處理原則是不是一樣的呢?接下來我們來考慮一下java中線程的中斷異常。java中有三個非常相似的方法interrupt,interrupted和isInterrupted。
  • JAVA異常及其異常處理方式
    異常處理異常是程序中的一些錯誤,但並不是所有的錯誤都是異常,並且錯誤有時候是可以避免的。比如說,你的代碼少了一個分號,那麼運行出來結果是提示是錯誤 java.lang.Error;如果你用System.out.println(100/0),那麼你是因為你用0做了除數,會拋出 java.lang.ArithmeticException 的異常。
  • java分布式(java入門)
    c++和java是上層應用使用較多的程式語言,c++在遊戲和大型軟體開發中使用較多,當然這也和具體公司有關。按我的了解,c++在騰訊就用的比較多,java在阿里巴巴用的不少。使用c++多數是為了兼顧效率和面向對象,而java語言則照顧到網絡開發、網站開發、分布式、android開發等很多方面。另外,合格的java工程要比c++工程師多很多。
  • java中的IO流(字符流和字節流)
    Unicode(統一碼、萬國碼、單一碼)是計算機科學領域裡的一項業界標準,包括字符集、編碼方案等。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了 統一併且唯一的二進位編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。1990年開始研發,1994年正式公布。什麼是字符編碼?
  • java內存溢出之Java heap space(1/8)
    本篇是第1小篇。由於代碼中的某些錯誤, 導致系統佔用的內存越來越多. 如果某個方法/某段代碼存在內存洩漏的, 每執行一次, 就會(有更多的垃圾對象)佔用更多的內存.因為 JVM 自動封裝並處理了內存分配. 在程序執行過程中, JVM 會在必要時檢查內存中還有哪些對象仍在使用, 而不再使用的那些對象則會被丟棄, 並將其佔用的內存回收和重用。這個過程稱為 垃圾收集. JVM中負責垃圾回收的模塊叫做 垃圾收集器(GC)。
  • Java基礎之異常處理機制
    ,如果處理不了異常,就將其交給調用者來處理;Java 異常體系:Java API文檔中的詳細介紹如下Exception:表示異常,指程序中出現不正常的情況,異常一般都是需要程式設計師來處理的(可以捕獲或者拋出);幾乎其所有的子類都是以「Exception」作為類名的後綴;Throwable:在Java 體系中,Throwable
  • 帶你了解Java中的異常處理機制
    異常處理最根本的優勢就是將檢測錯誤(由被調用的方法完成)從處理錯誤(由調用方法完成)中分離出來。2. 異常類型異常:在Java語言中,將程序執行中發生的不正常情況稱為「異常」。一般是指編程時的邏輯錯誤,是程式設計師應該積極避免其出現的異常。java.lang.RuntimeException類及它的子類都是運行時異常。對於這類異常,可以不作處理,直接找到出現問題的代碼,進行規避。因為這類異常很普遍,若全處理可能會對程序的可讀性和運行效率產生影響。
  • Java自動化測試框架(TestNG)——異常測試
    運行時異常與檢查異常Java中 對於異常分為運行時異常與檢查異常。運行時異常,編譯時不被檢查的異常,不需要用throws 聲明拋出 異常對象所屬類,也可以不用throw 拋出異常對象或異常引用。對於調用該方法,也不需要放於 try-catch 代碼塊中。(避免程序代碼錯誤被掩蓋在運行中無法察覺)檢查異常,編譯時被檢測的異常,一旦用throw 拋出異常,如果當前方法可處理異常,那麼需要在該方法內通過 try-catch 處理異常。如果當前方法不具備該異常的處理能力,那麼必須在參數列表後方法體 前使用 throws 聲明異常所屬類,交給方法的調用方處理 。
  • 最全的java學習順序和詳細知識點總結(思維導圖)
    java基礎學習篇(一) JAVA是一種面向對象的程式語言。吸收了C++的許多優點,摒棄了C++裡難以理解的多繼承、指針等概念,大大簡化了程序設計,初學者學起來比較容易,常常是編程開發者的入門必選語言。