分有return和没return分析try-catch-finally执行顺序:
- 无return:
try中没抛出异常:执行try→不执行catch→执行finally
try中抛出异常:执行try(抛出异常语句之后的代码不再执行)→执行catch→执行finally
- 有return:
try块中有return
①try中没抛出异常:执行try(执行return前)→不执行catch→执行finally→执行try内return→finally之后的return不再执行(因含1条return轨迹)
②try中抛出异常:执行try(抛出异常语句之后的代码不再执行)→执行catch→执行finally→finally之后的return执行(因此时return内未执行)
public static void main(String[] args) {
test dx=new test();
System.out.println(dx.fun());
}
public boolean fun() {
int a[] = new int[5];
try {
System.out.println("捕获数组越界异常:" + a[5]);
return true;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("异常11:" + e.getLocalizedMessage());
} finally {
System.out.println("执行finally");
}
return false;
}
catch块中有return
①try中没抛出异常:执行try→不执行catch→执行finally→finally之后的return执行
②try中抛出异常:执行try→执行catch→执行finally→执行catch内return→finally之后的return不执行
public static void main(String[] args) {
test dx=new test();
System.out.println(dx.fun());
}
public boolean fun() {
int a[] = new int[5];
try {
System.out.println("捕获数组越界异常:" + a[4]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("异常11:" + e.getLocalizedMessage());
return true;
} finally {
System.out.println("执行finally");
}
return false;
}
try+catch块中有return
①try中没抛出异常:try→finally→try内return
②try中抛出异常:try→catch→finally→catch内return
public static void main(String[] args) {
test dx=new test();
System.out.println(dx.fun());
}
public boolean fun() {
int a[] = new int[5];
try {
System.out.println("捕获数组越界异常:" + a[4]);
return true;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("异常11:" + e.getLocalizedMessage());
return false;
} finally {
System.out.println("执行finally");
}
}
try+finally块中有return
①try中没抛出异常:try→finally→finally内return(不再执行try内return)
②try中抛出异常:try→catch→finally→finally内return(不再执行try内return)
public static void main(String[] args) {
test dx=new test();
System.out.println(dx.fun());
}
@SuppressWarnings("finally")
public boolean fun() {
int a[] = new int[5];
try {
System.out.println("捕获数组越界异常:" + a[4]);
return true;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("异常11:" + e.getLocalizedMessage());
} finally {
System.out.println("执行finally");
return false;
}
}
catch+finally块中有return
①try中没抛出异常:try→finally→finally内return
②try中抛出异常:try→catch→finally→finally内return(不再执行catch内return)
public static void main(String[] args) {
test dx=new test();
System.out.println(dx.fun());
}
@SuppressWarnings("finally")
public boolean fun() {
int a[] = new int[5];
try {
System.out.println("捕获数组越界异常:" + a[4]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("异常11:" + e.getLocalizedMessage());
return true;
} finally {
System.out.println("执行finally");
return false;
}
}
try+catch+finally块中有return
①try中没抛出异常:try→finally→finally内return(不再执行try内return)
②try中抛出异常:try→catch→finally→finally内return(不再执行catch内return)
public static void main(String[] args) {
test dx=new test();
System.out.println(dx.fun());
}
@SuppressWarnings("finally")
public int fun() {
int a[] = new int[5];
try {
System.out.println("捕获数组越界异常:" + a[5]);
return 1;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("异常11:" + e.getLocalizedMessage());
return 2;
} finally {
System.out.println("执行finally");
return 3;
}
}