package test.liuwei;
import lombok.extern.slf4j.Slf4j;
/**
* @author liuwei
* @date 2019-09-27 09:45
* @desc TryCatchFinally穷举测试
* 演示在返回void以及非void时,尤其是在tcf组合中存在多个return语句时,tcf块的执行顺序
*/
@Slf4j
public class TryCatchFinallyTest {
private static final String STR = "a string value";
private static final String INT = "135";
public static void main(String[] args) {
log.info(">>>测试开始<<<");
//log.info(returnTest(INT));
voidTest(INT);
log.info("**********分割线飘过**********");
//log.info(returnTest(STR));
voidTest(STR);
log.info(">>>测试结束<<<");
}
private static void voidTest(String str){
try {
log.info("进入try块");
log.info("转换成功,结果为"+Integer.parseInt(str));
}catch (NumberFormatException e){
log.info("异常时进入catch块");
log.info("转换失败");
}finally {
log.info("始终进入finally块");
}
log.info("始终执行外部代码块");
}
private static String returnTest4TCF(String str){
try {
log.info("进入try块");
log.info("转换成功,结果为"+Integer.parseInt(str));
return "try块中return,永远不会返回";
}catch (NumberFormatException e){
log.info("异常时进入catch块");
log.info("转换失败");
return "catch块中return,永远不会返回";
}finally {
log.info("始终进入finally块");
return "始终返回finally块中的return";
}
}
private static String returnTest4CF(String str){
try {
log.info("进入try块");
log.info("转换成功,结果为"+Integer.parseInt(str));
}catch (NumberFormatException e){
log.info("异常时进入catch块");
log.info("转换失败");
return "catch块中return,永远不会返回";
}finally {
log.info("始终进入finally块");
return "始终返回finally块中的return";
}
}
private static String returnTest4TF(String str){
try {
log.info("进入try块");
log.info("转换成功,结果为"+Integer.parseInt(str));
return "try块中return,永远不会返回";
}catch (NumberFormatException e){
log.info("异常时进入catch块");
log.info("转换失败");
}finally {
log.info("始终进入finally块");
return "始终返回finally块中的return";
}
}
private static String returnTest4TC(String str){
try {
log.info("进入try块");
log.info("转换成功,结果为"+Integer.parseInt(str));
return "try块中return,无异常时返回";
}catch (NumberFormatException e){
log.info("异常时进入catch块");
log.info("转换失败");
return "catch块中return,异常时返回";
}finally {
log.info("始终进入finally块,在return语句调用前被调用,调用后直接返回到return语句处");
}
}
private static String returnTest4T(String str){
try {
log.info("进入try块");
log.info("转换成功,结果为"+Integer.parseInt(str));
return "try块中return,无异常时返回";
}catch (NumberFormatException e){
log.info("异常时进入catch块");
log.info("转换失败");
}finally {
log.info("始终进入finally块,在return语句调用前被调用,调用后直接返回到return语句处");
}
return "外部return,异常时返回";
}
private static String returnTest4C(String str){
try {
log.info("进入try块");
log.info("转换成功,结果为"+Integer.parseInt(str));
}catch (NumberFormatException e){
log.info("异常时进入catch块");
log.info("转换失败");
return "catch块中return,异常时返回";
}finally {
log.info("始终进入finally块,在return语句调用前被调用,调用后直接返回到return语句处");
}
return "外部return,无异常时返回";
}
private static String returnTest4F(String str){
try {
log.info("进入try块");
log.info("转换成功,结果为"+Integer.parseInt(str));
}catch (NumberFormatException e){
log.info("异常时进入catch块");
log.info("转换失败");
}finally {
log.info("始终进入finally块,在return语句调用前被调用,调用后直接返回到return语句处");
return "返回finally块中return";
}
}
private static String returnTest(String str){
try {
log.info("进入try块");
log.info("转换成功,结果为"+Integer.parseInt(str));
}catch (NumberFormatException e){
log.info("异常时进入catch块");
log.info("转换失败");
}finally {
log.info("始终进入finally块,在return语句调用前被调用,调用后直接返回到return语句处");
}
return "返回外部return";
}
}