1. 异常机制
1.1 异常概念
异常机制本质:当程序出现错误,程序安全的退出,处理完继续执行的机制
异常Exception,指的是程序运行过程中出现的非正常现象,例如用户输入错误,除数为零,需要处理的文件不存在,数组下标越界等。
在Java的异常处理机制中,采用很多用来描述和处理异常的类,称为异常类,异常类中定义包含了该类异常的信息和对异常进行处理的方法。
所谓异常处理,就是指程序在出现问题时依然可以正确的执行完。
public class TestException01 {
public static void main(String[] args) {
System.out.println("step1");
try {
int i = 1/0; //这个会产生异常
}catch(Exception e) { //捕获异常
e.printStackTrace(); //如果没有这玩意step2不会执行,程序结束
}
System.out.println("step2");
}
}
Java是采用面向对象的方式来处理异常,处理过程:
-
抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象交给JRE
-
捕获异常:JRE得到该异常后,寻找相应的代码来处理异常,JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。
1.2 异常分类
Throwable下面又派生了两个子类:Error和Exception
注意Exception即可,Error处理不了
UncheckedException是运行时异常,CheckedException编译通不过
2. 异常处理
2.1 捕获异常
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class TestCatchException {
public static void main(String[] args) {
FileReader reader = null;
try {
reader = new FileReader("d:/a.txt");
char c = (char) reader.read();
char c2 = (char) reader.read();
System.out.println(""+c+c2);
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}finally {
try {
if(reader !=null) {
reader.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
2.2 声明异常
利用throws
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Test03 {
public static void main(String[] args) throws IOException {
FileReader reader = null;
reader = new FileReader("d:/a.txt");
char c = (char) reader.read();
char c2 = (char) reader.read();
System.out.println(""+c+c2);
reader.close();
}
}
2.3 try-with-resource
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Test04 {
public static void main(String[] args) {
try(FileReader reader = new FileReader("d:/a.txt");){
char c = (char) reader.read();
char c2 = (char) reader.read();
System.out.println(""+c+c2);
}catch(Exception e){
e.printStackTrace();
}
}
}