<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.2.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
package com.ruoyi.web.controller.platform;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TryCatchFinally {
private final static Logger logger = LoggerFactory.getLogger(TryCatchFinally.class);
public String test1() {
String t = "";
try {
t = "try";
return t;
} catch (Exception e) {
t = "catch";
return t;
} finally {
t = "finally";
}
}
@Test
public void result1() {
logger.info("=============test1返回結果:{}===============", test1());
}
public String test2() {
String t = "";
try {
t = "try";
return t;
} catch (Exception e) {
t = "catch";
return t;
} finally {
t = "finally";
return t;
}
}
@Test
public void result2() {
logger.info("=============test2返回結果:{}===============", test2());
}
public String test3() {
String t = "";
try {
t = "try";
Integer.parseInt(null);
return t;
} catch (Exception e) {
t = "catch";
return t;
} finally {
t = "finally";
logger.info("########finally的值是{}###########", t);
}
}
@Test
public void result3() {
logger.info("=============test3返回結果:{}===============", test3());
}
public String test4() {
String t = "";
try {
t = "try";
Integer.parseInt(null);
return t;
} catch (Exception e) {
t = "catch";
return t;
} finally {
t = "finally";
return t;
}
}
@Test
public void result4() {
logger.info("=============test4返回結果:{}===============", test4());
}
public String test5() {
String t = "";
try {
t = "try";
Integer.parseInt(null);
return t;
} catch (Exception e) {
t = "catch";
Integer.parseInt(null);
return t;
} finally {
t = "finally";
}
}
@Test
public void result5() {
logger.info("=============test5返回結果:{}===============", test5());
}
public String test6() {
String t = "";
try {
t = "try";
Integer.parseInt(null);
return t;
} catch (Exception e) {
t = "catch";
Integer.parseInt(null);
return t;
} finally {
t = "finally";
return t;
}
}
@Test
public void result6() {
logger.info("=============test6返回結果:{}===============", test6());
}
public String test7() {
String t = "";
try {
t = "try";
Integer.parseInt(null);
return t;
} catch (NullPointerException e) {
t = "catch";
return t;
} finally {
t = "finally";
}
}
@Test
public void result7() {
logger.info("=============test7返回結果:{}===============", test7());
}
public String test8() {
String t = "";
try {
t = "try";
Integer.parseInt(null);
return t;
} catch (NullPointerException e) {
t = "catch";
return t;
} finally {
t = "finally";
return t;
}
}
@Test
public void result8() {
logger.info("=============test8返回結果:{}===============", test8());
}
public String test9() {
String t = "";
try {
t = "try";
return t;
} catch (Exception e) {
t = "catch";
return t;
} finally {
t = "finally";
String.valueOf(null);
return t;
}
}
@Test
public void result9() {
logger.info("=============test9返回結果:{}===============", test9());
}
}
對以上所有的例子進行總結
- try、catch、finally語句中,在如果try語句有return語句,則返回的之後當前try中變量此時對應的值,此後對變量做任何的修改,都不影響try中return的返回值
- 如果finally塊中有return 語句,則返回try或catch中的返回語句忽略。
- 如果finally塊中拋出異常,則整個try、catch、finally塊中拋出異常
所以使用try、catch、finally語句塊中需要注意的是
- 儘量在try或者catch中使用return語句。通過finally塊中達到對try或者catch返回值修改是不可行的。
- finally塊中避免使用return語句,因爲finally塊中如果使用return語句,會顯示的消化掉try、catch塊中的異常信息,屏蔽了錯誤的發生
- finally塊中避免再次拋出異常,否則整個包含try語句塊的方法回拋出異常,並且會消化掉try、catch塊中的異常