Java try语句的嵌套
Try語(yǔ)句可以被嵌套。也就是說(shuō),一個(gè)try語(yǔ)句可以在另一個(gè)try塊內(nèi)部。每次進(jìn)入try語(yǔ)句,異常的前后關(guān)系都會(huì)被推入堆棧。如果一個(gè)內(nèi)部的try語(yǔ)句不含特殊異常的catch處理程序,堆棧將彈出,下一個(gè)try語(yǔ)句的catch處理程序?qū)z查是否與之匹配。這個(gè)過(guò)程將繼續(xù)直到一個(gè)catch語(yǔ)句匹配成功,或者是直到所有的嵌套try語(yǔ)句被檢查耗盡。如果沒(méi)有catch語(yǔ)句匹配,Java的運(yùn)行時(shí)系統(tǒng)將處理這個(gè)異常。下面是運(yùn)用嵌套try語(yǔ)句的一個(gè)例子:
// An example of nested try statements.
class NestTry {
public static void main(String args[]) {
try {
int a = args.length;
/* If no command-line args are present,the following statement will generate?a divide-by-zero exception. */
int b = 42 / a;
System.out.println(“a = ” + a);
try { // nested try block
/* If one command-line arg is used,then a divide-by-zero exception?will be generated by the following code. */
if(a==1) a = a/(a-a); // division by zero
/* If two command-line args are used,then generate an out-of-bounds exception. */
if(a==2) {
int c[] = { 1 };
c[42] = 99; // generate an out-of-bounds exception
}
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println(“Array index out-of-bounds: ” + e);
}
} catch(ArithmeticException e) {
System.out.println(“Divide by 0: ” + e);
}
}
}
如你所見(jiàn),該程序在一個(gè)try塊中嵌套了另一個(gè)try塊。程序工作如下:當(dāng)你在沒(méi)有命令行參數(shù)的情況下執(zhí)行該程序,外面的try塊將產(chǎn)生一個(gè)被零除的異常。程序在有一個(gè)命令行參數(shù)條件下執(zhí)行,由嵌套的try塊產(chǎn)生一個(gè)被零除的錯(cuò)誤。因?yàn)閮?nèi)部的塊不匹配這個(gè)異常,它將把異常傳給外部的try塊,在那里異常被處理。如果你在具有兩個(gè)命令行參數(shù)的條件下執(zhí)行該程序,由內(nèi)部try塊產(chǎn)生一個(gè)數(shù)組邊界異常。下面的結(jié)果闡述了每一種情況:
C:>java NestTry
Divide by 0: java.lang.ArithmeticException: / by zero
C:>java NestTry One
a = 1
Divide by 0: java.lang.ArithmeticException: / by zero
C:>java NestTry One Two
a = 2
Array index out-of-bounds: java.lang.ArrayIndexOutOfBoundsException
當(dāng)有方法調(diào)用時(shí),try語(yǔ)句的嵌套可以很隱蔽的發(fā)生。例如,你可以把對(duì)方法的調(diào)用放在一個(gè)try塊中。在該方法內(nèi)部,有另一個(gè)try語(yǔ)句。這種情況下,方法內(nèi)部的try仍然是嵌套在外部調(diào)用該方法的try塊中的。下面是前面例子的修改,嵌套的try塊移到了方法nesttry( )的內(nèi)部:
/* Try statements can be implicitly nested via?calls to methods. */
class MethNestTry {
static void nesttry(int a) {
try { // nested try block
/* If one command-line arg is used,then a divide-by-zero exception?will be generated by the following code. */
if(a==1) a = a/(a-a); // division by zero
/* If two command-line args are used,then generate an out-of-bounds exception. */
if(a==2) {
int c[] = { 1 };
c[42] = 99; // generate an out-of-bounds exception
}
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println(“Array index out-of-bounds: ” + e);
}
}
public static void main(String args[]) {
try {
int a = args.length;
/* If no command-line args are present,the following statement will generate?a divide-by-zero exception. */
int b = 42 / a;
System.out.println(“a = ” + a);
nesttry(a);
} catch(ArithmeticException e) {
System.out.println(“Divide by 0: ” + e);
}
}
}
該程序的輸出與前面的例子相同。
七. 多線程編程
1.線程的概念
2.Java線程模型
3.主線程
4.創(chuàng)建線程
5.創(chuàng)建多線程
6.isAlive()和join()的使用
7.線程優(yōu)先級(jí)
8.線程同步
9.線程間通信
10.線程死鎖
11.線程的掛起、恢復(fù)和終止
總結(jié)
以上是生活随笔為你收集整理的Java try语句的嵌套的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: html中input、label、for
- 下一篇: 自动化运维之–Cobbler