Java异常处理
我将对Java的异常处理进行输出!
例外是指与一般规则或情况不同的特殊情况或个体。
即使编译成功,执行时仍可能出现错误。在执行时发生的错误称为异常。当发生异常时,被称为“抛出异常”。
异常类分为两种类型:checked异常和unchecked异常。
checked异常是由于Java执行环境以外的因素,例如DB等原因而产生的;而unchecked异常是由正在执行的程序本身导致的。对于checked异常,异常处理是必要的。
尝试-捕获-最终
异常处理由try块、catch块和finally块组成。
public class Main{
public static void main(String[] args){
String[] animal = {"猫","犬","兎"};
for(int i = 0; i < 4; i++) {
try{
System.out.println(animal[i]);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("例外発生");
}finally{
System.out.println("必ず実行");
}
}
}
}
执行结果 (Shí
猫
必ず実行
犬
必ず実行
兎
必ず実行
例外発生
必ず実行
上述的代碼包含了一個有3個元素的陣列,使用for循環按順序訪問陣列的內容。
然而,由於實行了4次,所以第4次會觸發「使用無效索引訪問陣列」的異常。因此,在catch塊的參數(ArrayIndexOutOfBoundsException)中寫入,當第4次時可以在catch塊中檢測到並執行catch塊中的處理。 finally 塊將在無論是否出現異常都將被執行。
扔
除了try-catch-finally块外,还可以通过throws关键字进行异常处理。在定义有可能发生异常的方法时,需要指定”throws 异常类名”。当在该方法内部发生指定的异常时,异常对象会被传递给该方法的调用者。
投掷的好处
让我们来看一下不使用throws的异常处理情况。
class Test{
void live(....){
Animal animal = new Animal;
animal.eat(...);
animal.sleep(...);
}
}
class Animal{
void eat(...){
try{
...
}catch(ArrayIndexOutOfBoundsException e){
...
}
}
void sleep(...){
try{
...
}catch(ArrayIndexOutOfBoundsException e){
...
}
}
}
即使使用这种方法也没有问题,但每次定义方法时都需要编写异常处理。
如果出现相同的异常处理,代码将重复。如果使用throws,则可以解决这个问题。
class Test{
void live(....){
Animal animal = new Animal;
try{
animal.eat(...); //①
animal.sleep(...);//②
}catch(ArrayIndexOutOfBoundsException e){
//例外発生時の処理
}
}
}
class Animal{
void eat(...) throws ArrayIndexOutOfBoundsException{
//不正なインデックスを使って配列がアクセスされた例外が発生した場合、①(メソッドの呼び出し元)に例外オブジェクトを転送する
}
void sleep(...) throws ArrayIndexOutOfBoundsException{
//不正なインデックスを使って配列がアクセスされた例外が発生した場合、②(メソッドの呼び出し元)に例外をオブジェクト転送する
}
}
在方法名之后加上”throws ArrayIndexOutOfBoundsException”,这样如果方法内发生了ArrayIndexOutOfBoundsException的异常,就会将异常传递给方法的调用者。而且由于方法的调用者被包围在try块中,所以下方的catch块可以捕获到ArrayIndexOutOfBoundsException异常对象,并执行异常发生时的处理。
请在以上中,如果有错误的地方或更方便的写法,请教教我!