1.异常和error的区别
异常:程序可以处理的异常,可以通过catch来捕获。
error:程序无法处理的错误,例如虚拟机内存不足等。
2.异常的分类
分为受检查异常和非受检查异常。
(1)受检查异常:如果不通过catch捕获的话,就无法通过编译。除了RunTimeException以及其子类以外的异常,都是受检查异常。
(2)非受检查异常:不处理该异常也能通过编译。
3.try…catch…finally
try{
可能出现异常的代码
}catch(异常 对象名){
处理异常的代码-> 将来开发会将异常信息保存到日志文件中
}finally{
不管是否有异常,都会执行的代码
}
实例:
package bilibili.chapter12;
import java.io.FileNotFoundException;
public class test {
public static void main(String []args){
String s = "a.txst";
try{
add(s);
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("finally执行");
}
}
public static void add(String s) throws FileNotFoundException {
if(!s.endsWith("txt")){
throw new FileNotFoundException("文件找不到");
}
System.out.println("我执行到方法了");
}
}
输出
java.io.FileNotFoundException: 文件找不到
at bilibili.chapter12.test.add(test.java:21)
at bilibili.chapter12.test.main(test.java:9)
finally执行
finally使用场景:
1.关闭资源
2.原因:对象如果没有用了,GC(垃圾回收器)回收,用来回收堆内存中的垃圾,释放内存,但是有一些对象GC回收不了,比如:连接对象(Connection),IO流对象,Socket对象,这些对象GC回收不了,就需要我们自己手动回收,手动关闭
将来不能回收的对象new完之后,后续操作不管是否操作成功,是否有异常,我们都需要手动关闭,此时我们就可以将关闭资源的代码放到finally中
4.try-catch和throws的使用场景
(1)如果处理异常之后,想让后续的代码正常执行,要使用try-catch
(2)如果方法之间是递进关系(调用),可以先throws,到了最后调用的方法再使用try-catch做异常处理