我知道并认识到(或者我认为是)由try{}catch
阻止异常并通过类或方法抛出异常的差异,但我想知道,如果有办法,可以使用throws
通过方法kayword,并在抛出异常后继续执行此代码/方法?
我的意思是,如下例所示:
public class Main {
int[] array = {0,1,2};
public static void main(String[] args){
Main object = new Main();
System.out.println("Dealing inside try{}catch block");
object.dealInside();
System.out.println("Dealing by throws keyword");
try{
object.throwOutside();
}catch (ArrayIndexOutOfBoundsException ex){
}
}
public void dealInside(){
for(int i = 0; i < 6; i++){
try{
System.out.println(i);
int r = array[i];
}catch (ArrayIndexOutOfBoundsException ex){
}
}
}
public void throwOutside() throws ArrayIndexOutOfBoundsException{
for(int i = 0; i < 6; i++){
System.out.println(i);
int r = array[i];
}
}
}
如果循环内有try{}catch
块,即使发生异常,方法也可以继续,并且即使数组的长度为3,它也会打印int,即使方法为{{1异常,一旦被中断的方法停止。
throws
异常?throws
相似/相同的异常,没有中断
他们的执行?答案 0 :(得分:2)
finally
这是finally
块的确切目的。无论是否在它之前捕获到异常,都要在其中执行代码。它将始终执行。
写一些逻辑,通过在finally块中更改i的值来实现您真正想要的。
try {
//risky code
} catch(Exception ex) {
//handle caught exception
} finally {
//this part always executes
}
现在,棘手的一点。如果你真的希望for循环继续前进,即使在后续语句中捕获了异常,这就是你要做的。
for(int i = 0; i < 6; i++) {
Thread t = new Thread(new Runnable() {
void run() {
try{
System.out.println(i);
int r = array[i];
}catch (ArrayIndexOutOfBoundsException ex){
}
});
t.start();
}
for loop
正在主thread
上运行,而风险代码位于单独的线程中。因此,即使遇到异常,主线程也会继续运行,因为它不知道抛出的异常。这是一个巧妙的伎俩。但我不知道在实践中使用它是否是个好主意。