JAVA异常
参考网址:https://www.bilibili.com/video/BV1JX4y1g78e?p=12
try-catch和throw,throws的区别和联系
我写了一个小案例:
package com.genericity.demo9;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class NewException {
public int show1() throws FileNotFoundException {
BufferedReader bufferedReader = new BufferedReader(new FileReader("d://cc.txt"));
return 0;
}
public int show2() {
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader("d://cc.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return 0;
}
public int show3(boolean flag){
if(flag){
System.out.println("程序运行正确");
}else{
throw new RuntimeException("程序运行错误");
}
return 0;
}
}
package com.genericity.demo9;
import java.io.FileNotFoundException;
public class TestException1 {
public static void main(String[] args) {
}
public String test() {
NewException newException = new NewException();
try {
int show = newException.show1();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return "ok";
}
}
package com.genericity.demo9;
import java.io.FileNotFoundException;
public class TestException2 {
public static void main(String[] args) {
}
public String test() {
NewException newException = new NewException();
// try {
// int show = newException.show2();
// } catch (FileNotFoundException e) {//由于在NewException类中,show2方法已经将异常try catch捕获处理了,这里如果还接着处理,就会抛出异常,所以我们会看到这里是报错的。
// e.printStackTrace();
// }
int show = newException.show2();//正确的做法是:直接调用show2()方法就可以了
return "ok";
}
}
package com.genericity.demo9;
public class TestException3 {
public static void main(String[] args) {
TestException3 testException3 = new TestException3();
// testException3.test(true);
testException3.test(false);
}
public String test(boolean flag) {
NewException newException = new NewException();
System.out.println(newException.show3(flag));//这样写也是正确的,控制台会报错,Exception in thread "main" java.lang.RuntimeException: 程序运行错误,当然你也可以使用try catch 进行异常的捕捉
//下面是使用try catch 进行异常的捕捉,运行结果:程序运行还算正常
// try {
// newException.show3(flag);
// } catch (RuntimeException e) {
// System.out.println("程序运行还算正常");
// }
return "ok";
}
}
首先,我们先讲解一下这三者之间的区别:
try catch 就是我们在编译的时候可能出现的异常,我们使用try catch 捕获了这些个可能出现的异常,在方法调用的时候,我们直接调用就可以了,就不用再进行异常的处理了,如果再次进行异常的处理,代码是会爆红的。
throws 将编译时候出现的异常向上抛出,也就是将可能出现的异常写到方法后面,多个异常之间用逗号分隔;也就是说将异常扔给了调用方,调用放如果不处理异常就接着向上throws抛出,如果处理,就是用try catch捕获。
throw 是我们在写代码的时候手动抛出的异常,在调用的时候,可以处理异常,也可以不用处理异常,不处理异常的时候,也是不会报错的。
运行时出现的异常是不用处理的,编译的时候出现的异常是一定要处理的。
用户自定义异常类:
package com.genericity.demo9;
/**
* 自定义异常类
*/
public class MyException extends RuntimeException{
static final long serialVersionUID = -7034897123745766939L;
public MyException(){
}
public MyException(String msg){
super(msg);
}
}
package com.genericity.demo9;
/**
* 练习异常
*/
public class TestException4 {
public static void main(String[] args) {
if(false){
System.out.println("程序运行正常");
}else{
throw new MyException("程序运行异常");
}
}
}
//Exception in thread "main" com.genericity.demo9.MyException: 程序运行异常
at com.genericity.demo9.TestException4.main(TestException4.java:12)