java的异常
- 写一个测试类
import lombok.extern.slf4j.Slf4j;
/**
* 测试 try catch throw throws
*/
@Slf4j
public class ExceptionTest {
public static void main(String[] args) {
ExceptionTest exceptionTest = new ExceptionTest();
// exceptionTest.testTryCatch();
// try {
// exceptionTest.testThrows();
// } catch (Exception e) {
// log.info("测试抛出异常这个方法,出现了异常");
// e.printStackTrace();
// }
try {
exceptionTest.testThrow();
} catch (Exception e) {
log.info("测试声明异常这个方法,出现了异常");
e.printStackTrace();
}
String s = exceptionTest.test01();
System.out.println("s:" + s);
String str = exceptionTest.test02();
System.out.println("str:" + str);
}
/**
* 测试try catch
* 特点: 1. 出现异常,代码会继续执行
* 2. 调用此方法,不需要处理异常
*/
public void testTryCatch(){
log.info("开始测试try catch");
try{
int number = 1/0;
}catch (ArithmeticException e){
log.info("进入了catch 中,异常信息为:" + e.getMessage());
}
log.info("出现了异常,是否还执行此方法");
}
/**
* 测试抛出异常
* 特点: 1. 出现异常,代码中止执行
* 2. 调用此方法,需要处理异常
*/
public void testThrows() throws Exception{
log.info("开始测试 抛出异常");
int number = 1/0;
log.info("出现了异常,是否还执行此方法");
}
/**
* 测试声明异常
* 特点: 1. throw 后不允许有代码
* 2. 调用此方法,需要处理异常
*/
public void testThrow() throws Exception{
log.info("开始测试 声明异常");
int number = 1/0;
throw new Exception();
// log.info("出现了异常,是否还执行此方法");
}
/**
* catch 的 return 无法返回了
* 当 catch 和 finally 中,都有 return 时, 当出现异常时,执行的是 finally 中的return
* @return
*/
public String test01(){
try{
int number = 1/0;
}catch (Exception e){
System.out.println("进入了catch");
e.printStackTrace();
return "false";
}finally {
System.out.println("进入了finally");
return "success";
}
}
public String test02(){
String str = "";
try{
int number = 1/0;
}catch (Exception e){
System.out.println("进入了catch");
e.printStackTrace();
str = "false";
}finally {
System.out.println("进入了finally");
str = "success";
}
return str;
}
}
总结: 从代码是否继续执行和调用方法的处理方式两点进行测试
- 当 catch 和 finally 中,都有 return 时, 当出现异常时,执行的是 finally 中的return