异常的处理:
- 异常机制的本质就是:当程序出现问题时,能使程序安全的退出。
1.抛出异常: - 在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前的执行路径,并把异常对象提交给JRE
2.捕获异常 - JRE得到该异常后,寻找相应的代码来处理该异常,JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。
异常的分类:
Throwable是所有异常的根类,位于java.lang.Throwable
-
Error (错误,是由虚拟机内部出现的问题,不是代码块的问题)
-
Exception(异常)
RunTimeException(运行时异常):
CheckedException(已检查异常):
RunTimeException(运行时异常):一般是逻辑的错误引起的异常
nullPointException:当一个对象是空的时候,如果去调用该对象的属性和方法。
解决:判断是否为空,才能调用相应的属性和方法。
-
classCastException(强制转型):
-
ArrayIndexOutBoundsException(数组越界异常):
-
NumberFormatException(数字格式化异常):
解决:可以利用正则表达式。 -
CheckedException(已检查异常):编译器会报错。
一般抛出或者用try/catch捕获:
try/catch:
throws:
public class TestException {
public static void main(String[] args) {
// TODO Auto-generated method stub
FileReader reader=null;
try {
reader=new FileReader("D:/java/java.txt");
char c1=(char)reader.read();
System.out.println(c1);
} catch (FileNotFoundException e) {//FileNotFoundException是IOException的子类,
//catch可以有多个
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {//子类异常放在父类异常的前面
// TODO Auto-generated catch block
e.printStackTrace();
}finally{//只能有一个
try {
if(reader!=null)
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
可以利用throws直接抛给调用者,或者层层外抛,最后抛给JRE
public class TestException {
public static void main(String[] args) throws IOException {
//可以直接抛出,抛给调用者
// TODO Auto-generated method stub
FileReader reader=null;
reader=new FileReader("D:/java/java.txt");
char c1=(char)reader.read();
System.out.println(c1);
if(reader!=null)
reader.close();
}
}