自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

應(yīng)用技巧:Java中的異常處理

企業(yè)動(dòng)態(tài)
異常處理是初學(xué)者經(jīng)常忽視執(zhí)行的編程技巧。然而,當(dāng)他們完成了一項(xiàng)大型項(xiàng)目后,就會(huì)發(fā)現(xiàn)僅僅停留在表面的工作是不夠的。在本文中,我們將對異常處理進(jìn)行討論,并為大家解釋其重要性,尤其是要告訴大家怎樣處理這些情況。

異常處理是初學(xué)者經(jīng)常忽視執(zhí)行的編程技巧。然而,當(dāng)他們完成了一項(xiàng)大型項(xiàng)目后,就會(huì)發(fā)現(xiàn)僅僅停留在表面的工作是不夠的。在本文中,我們將對異常處理進(jìn)行討論,并為大家解釋其重要性,尤其是要告訴大家怎樣處理這些情況。

首先,讓我們解釋一下什么是異常情況,通常也稱例外。正如在其他的編程語言中那樣,它也適用于Java:異常情況是那些在運(yùn)行時(shí)出現(xiàn)錯(cuò)誤的情況。這些錯(cuò)誤并非真正的錯(cuò)誤,因?yàn)樗麄兪且恍├?。我們可以將這些情況理解為必須解決的異常事件,否則程序?qū)o法繼續(xù)執(zhí)行。所以我們就有必要了解怎樣處理異常事件。
在異常事件的例子中最顯著的應(yīng)該是在程序執(zhí)行時(shí),運(yùn)行時(shí)的分配變成了零。這樣程序就無法執(zhí)行,于是Java就會(huì)拋出一個(gè)異常事件,確切點(diǎn)說是ArithmeticException。從Java程序員的角度來看,異常事件是對象。拋出異常事件類似于拋出對象。但是,并非所有的對象都可以被拋出。

為了充分理解可拋出的異常事件,整個(gè)類層次結(jié)構(gòu)的一些部分要被提交。主要的類稱為Throwable。這個(gè)類擁有兩個(gè)子類:Exception 和Error。一個(gè)異常事件對象應(yīng)從Throwable的類中傳出。意味著它應(yīng)該是Exception子類或Error子類的一個(gè)對象實(shí)例。這些都可以在 java.lang數(shù)據(jù)包中找到。

異常處理就是捕捉可能在運(yùn)行時(shí)被拋出的異常事件的一項(xiàng)技術(shù)。Java通過try-catch-finally的異常處理語句為我們提供了強(qiáng)大的異常處理解決方案。而在另一方面,你也可以使用已經(jīng)聲明的異常事件,如ArithmeticException, NullPointerException等。其他類擴(kuò)展了Exception 類,如IOException子類。

此外,我們應(yīng)該注意到異常事件包含了兩種情況:檢查過的和沒檢查的。技術(shù)上,我們認(rèn)為沒檢查過的異常事件RuntimeExceptions。這些不需要在拋出的語句中作出聲明,而且對它們的捕捉也是選擇性的。不過,它們一般不會(huì)有什么影響,如果程序員根本不能發(fā)現(xiàn)它們的存在。在大多數(shù)情況下,這些都是邏輯性的編程錯(cuò)誤,如NullPointerException或者ArrayIndexOutOfBounds。

同時(shí),對異常事件進(jìn)行技術(shù)性檢查也迫使程序員對其進(jìn)行處理和管理,意味著要對其進(jìn)行單獨(dú)捕捉并覆蓋。這些都來自Exceptions類和它的子類,包括我們之前討論過的RuntimeExceptions。檢查過的異常事件要求異常事件處理因?yàn)樗鼈冇锌赡軐?dǎo)致程序終止。

現(xiàn)在,我們對異常事件有了個(gè)基本的了解,下面就讓我們啟動(dòng)集成開發(fā)環(huán)境開始編碼吧!

異常處理

前面我們提到了異常處理就是指處理代碼中的異常事件,或者在運(yùn)行時(shí)向運(yùn)行引擎拋出異常事件,在引擎末端它會(huì)搜索異常事件處理例程。它使用包含了一系列方法調(diào)用的調(diào)用堆棧進(jìn)行搜索。

一般而言,異常事件可能因?yàn)榘粋€(gè)異?;顒?dòng)或其他異步異常導(dǎo)致的。我們討論的異常事件包括了一些基本的處理議題:怎樣捕捉和處理這些異常事件。

Java允許我們創(chuàng)建自己的Exception對象和類,但是會(huì)有一個(gè)關(guān)鍵的請求。這些對象和類必須是擴(kuò)展的Exception類。編碼標(biāo)準(zhǔn)要求異常事件應(yīng)該充分命名,意味著它們的名字就代表了其本身。
throw new Exception(“ This is an exception!”)

下面,我們看看要怎樣捕捉和處理這些異常事件。檢查以下代碼:

try{
// this is the block of code where the exception happens
// sometimes called as source/root of exception
// or even called as tricky block or tricky method

catch{Exception_Typel e) {
// dealing with this kind of exception

Catch (Exception_Type2 e) {
// dealing witn this kind of exception

//... unlimited number of catches are possible
finally {
// this block of code is always executed
try-catch-finally語句的第一個(gè)部分是嘗試阻止。這是異常事件有可能發(fā)生的部分。通常,我們建議代碼行用最小的數(shù)量來編寫,因?yàn)樗鼈冎粫?huì)在異常事件發(fā)生的時(shí)候執(zhí)行。這種情況發(fā)生時(shí),執(zhí)行會(huì)跳轉(zhuǎn)去捕捉那些異常事件被比較的塊中。如果它們匹配,那么就可以處理異常事件。
不論嘗試阻止的時(shí)候,異常事件會(huì)不會(huì)發(fā)生,或不管能不能得到處理,阻止總會(huì)執(zhí)行。由于它總是被執(zhí)行,所以我們推薦你在這里做一些清理。因此,正如所預(yù)料的那樣,執(zhí)行起來就是具有選擇性的。
Try-catch模塊的結(jié)構(gòu)類似于switch-case的結(jié)構(gòu)。在檢查過的需要處理的異常事件中,是有可能在相同方法中將其處理或者拋出的。后者可以通過關(guān)鍵詞拋出。在這種情況下,異常事件的種類必須在方法簽名中被指定??催@個(gè)例子:
Void myMethod () throws SomeKindOfException{
// method goes here
}

接下來,我們將為大家展示更多的異常處理實(shí)例。

初學(xué)者常常與非匹配數(shù)據(jù)類型糾纏不清。通常,它們會(huì)引發(fā)一些問題,例如,在做加法時(shí)出現(xiàn)非數(shù)字型代碼。下面給大家展示的代碼中,出現(xiàn)了異常處理的工作環(huán)境。檢查該網(wǎng)頁以完成嵌入式Exception種類的清單。現(xiàn)在,我們要處理NumberFormatException 的發(fā)生。

public static void main (String args[] ) {
double sum= 0;
for (int i=0; i﹤args. length; ++1)
try {
sum+= Double.parseDboule (args[i]);
}
Catch (NumberFormatException e) {
Ststem.out.printIn(args[i] + “non-numeric data on”);
}
System.out.printIn(“Total sum: “+ sum);
}

正如你所見到的,它和命令行參數(shù)一起運(yùn)行,而且一旦輪到非數(shù)字型參數(shù),它就會(huì)寫入system.out,意指出現(xiàn)的問題。但是項(xiàng)目會(huì)繼續(xù)進(jìn)行,因?yàn)閠ry模塊是循環(huán)的。否則,沒有合適的異常處理,項(xiàng)目就會(huì)終止。用這種方式總和還是可以計(jì)算處理并在最后顯示處理。

我們來看看另一個(gè)例子。在這個(gè)例子中,我們會(huì)要建立自己的異常實(shí)例類,該類擴(kuò)展了其母Exception類。應(yīng)用程序會(huì)模擬用于異常處理和拋出的堆棧機(jī)制,如堆棧是滿的或者是空的。檢查一下。

Public class StackException extends Exception {
Public StackException (String text) {
Super (text)
}
}
現(xiàn)在讓我們創(chuàng)建一個(gè)Stack類。注意push和pop方法。它們正拋出StackException,而這一動(dòng)作由方法簽名導(dǎo)入。此外,還有一個(gè)if條件,且條件滿足時(shí),異常事件會(huì)被拋出。否則,一切都會(huì)順利運(yùn)行。
public class Stack {
private final int SIZE = 100;
private Object st[];
private int size;
private int sp;
public Stack (int size) {
if (size < MAXSIZE)
this.size = size;
else
this.size = MAXSIZE;
this.st = new Object [size];
this.sp = -1;
}
public void push (Object o) throws StackException {
if (sp == this.size - 1)
throw new StackException ("Stack is full");
this.st [++this.sp] = o;
}
public Object pop () throws StackException {
if (sp == -1)
throw new StackException ("Stack is empty");
Object o = this.st [this.sp];
this.sp--;
return o;
}
public boolean isEmpty() {
return this.sp == -1;
}
}
好的,現(xiàn)在是時(shí)候?qū)懸粚慚ain class連同主要方法了。在這一部分,請對try-catch語句給予更多關(guān)注。有兩類異常情況可以被捕捉到。你也可以很容易地找出它們。
public class Main {
public static void main (String args[]) {
Stack s = new Stack (10);
for (int i = 0; i <= 10; ++i)
try {
s.push (new Integer(i));
}
catch (StackException e) {
System.out.println (e);
}
while (! s.isEmpty() ) {
try {
System.out.println( (Integer)(s.pop()) );
}
catch (StackException e) {
System.out.println(e);
}
}
}
}

當(dāng)然,這里也會(huì)有附帶輸出。如你所見,第一行顯示出的就是異常事件,因?yàn)槲覀円?1個(gè)要素填補(bǔ)堆棧,因此,在循環(huán)到isEmpty是錯(cuò)誤的時(shí),異常事件不會(huì)拋出。

Stack is full

練習(xí)幾次以上的幾段代碼。如果異常事件被拋出但是卻能夠正確被處理那就不要感到驚訝。這就是異常處理的神奇之處。

總結(jié)

在這篇文章里我們就異常處理的實(shí)用性和重要性進(jìn)行了分析。我們都知道,不管是檢查過的或是未經(jīng)檢查的,程序員都要處理好異常事件,否則可能出現(xiàn)程序的異常終止。我們強(qiáng)調(diào)要將理論與實(shí)踐相結(jié)合。坦率地說,本文雖只是冰山一角,但一些基本的知識(shí)已經(jīng)介紹給了大家。希望能在異常處理方面對大家有所幫助。

【編輯推薦】

  1. java認(rèn)證:關(guān)于FileFilter使用的一點(diǎn)心得
  2. JAVA資格認(rèn)證:使用Swing編寫全屏程序
  3. Java學(xué)習(xí)之路:不走彎路,就是捷徑
責(zé)任編輯:夏雨 來源: 考試大
相關(guān)推薦

2010-10-09 16:40:52

2013-04-07 10:01:26

Java異常處理

2020-07-02 22:42:18

Java異常編程

2021-09-08 09:41:09

開發(fā)Go代碼

2024-05-28 14:45:00

2011-07-05 10:20:38

java

2017-06-02 10:25:26

Java異常處理

2012-12-21 10:48:20

Java異常

2018-08-20 16:25:48

編程語言Java異常處理

2013-04-01 09:39:06

JavaJava異常

2017-09-26 11:43:12

Java異常和處理

2024-10-08 08:00:00

2023-07-07 07:53:26

Python異常處理

2023-09-24 13:55:42

Spring應(yīng)用程序

2023-12-11 14:19:00

Java程序異常

2024-02-21 12:18:00

Java虛擬機(jī)JVM

2009-01-05 09:14:17

.NETcatch性能損失

2015-03-16 16:16:15

JavaJava異常處理Java最佳實(shí)踐

2012-11-19 14:29:38

JavaJava異常異常處理

2023-10-10 13:23:18

空指針異常Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)