java异常是java提供的用于处理程序中错误的一种机制。
java是采用面向对象的方式来处理异常的,处理过程:
抛出异常:在程序执行一个方法的时候,如果发生异常则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。
捕获异常:JRE得到该异常后寻找相应的代码来处理该异常。JRE在方法的相应的调用栈中查找从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。
异常分为两类一种ERROR这种异常不需要我们处理,用于只是合理的应用程序不应该试图捕获的严重性问题,一种是Exception,Exception分为两种,一种是编译时异常(checked)这种异常通常需要我们捕获并且处理比如说Thread.sleep(1000);这句代码就需要我们捕获可能出现的异常并进行处理。另一种是运行时异常(RuntimeEXception)UncheckedException。这类异常在编译时通过但是运行时抛出,不要求我们必须捕获并处理(因为产生比较频繁处理麻烦,如果显示声明或捕获对程序可读性和运行效率影响较大。因此由系统自动监测并将它们交给缺省的异常处理程序)我们不必须捕获处理,但是我们可以进行捕获和处理。
异常的捕获和处理:
一 使用try{
}catch(Exception e){
}finally{
}
结构对异常进行捕获处理。try中写入相应的可能出现异常的程序代码。当出现异常的时候停止try中的代码执行跳到Catch捕获并赋值给e(不一定就是Exception类可以是其子类Catch代码块后面还可以跟catch块只不过要求越往下其异常的类需要越往上最外层是Exception类。)在{}中对异常e进行处理。当我们遇到异常后进行捕获处理之后程序执行finally中的代码,然后接着执行下面代码。如果没有遇到异常执行try块中的代码后跳过cacth和finally中的代码接着往下执行。
二
通过throws往上面抛异常,如果该方法内可能具有异常,我们不一定要在该方法内处理我们可以抛到调用该方法的地方进行处理,如果调用的地方也不想处理可以再往上抛异常最后交给JRE处理。但是一旦出现异常下面的代码不再执行直接跳到处理异常的地方去执行异常处理,执行完不在跳回执行下面代码。
publIc class Test{
public static void main(String[] ags){
Test test =new Test();
try{
test.getfliereder("d:\\a.txt");
}catch(Exception e){
e.printStackTrace();
}
}
public FileReader getfliereder(String filename) throws exception{
FileReader reder =new FileReader(new File(filename));
}
}
重写方法的throws原则:子类声明异常不能超过父类声明异常范围
1父类没有声明子类也不能
2不能抛出原有方法的抛出异常类的父类或者上层类
三
throw,throw是在方法内创建一个异常类的对象并且抛出去。
public class Test {
public static void main(String args[]) {
try {
throw new Exception("自定义的异常");
} catch (Exception e) {
e.printStackTrace();
}
}
}
四
自己定义异常类,但是需要继承Exception类
class MyException extends Exception {
public MyException(String msg) {
super(msg);
}
}
public class Test {
public static void main(String args[]) throws Exception {
throw new MyException("自己的异常类");
}
}