Java基础之异常处理机制

一、异常处理机制
1、异常的祖先是Throwable,有如下两个子类:
a、Error:表示错误,错误产生后程序员不能通过代码的方式纠正,只能事先避免,好比生命已经停止。
b、Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的
2、 Throwable中的常用方法
public void printStackTrace();打印异常的详细信息
public String getMessage();获取发生异常的原因
二、异常分类:
1):编译时期异常:Checked:Exception类和他的子类,除了运行时期异常其他的就是编译时期异常.
2):运行时期异常:Runtime: RuntimeExeption类和RuntimeException的子类.
编译时异常: 要求我们必须处理异常(throws/try-catch),不处理,则编译不能通过.
运行时异常: 可处理,可不处理.

处理异常的方法:
1、使用try-catch
在开发过程中建议使用这个异常处理机制,进行专业处理。Try必须与catch或finally同在,不能单独使用,二者必须出现一个。finally块中的语句一定会执行,无论是否存在错误。除非在try或catch语句中出现了退出JVM的语句,不执行。
finally与return先后执行问题:

   public class FinallyDemo {
      public static void main(String[] args) {
    System.out.println(show());
   }

/* 判断return与finally哪个先执行:
 * 1、直接在try中返回一个变量
 * 2、在finally中让这个变量自增,打印出结果
 * 如果是finally先执行的那么finally执行完之后变量的结果就
 * 会自行的加一,如果是return先执行那么就会先返回在进行自增
 *  */
public static int show() {
    System.out.println("...start...");
    int mun = 1;
    try {
        return mun;
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
                    //一定会执行的代码快,除非在该代码执行之前          
                    //就执行了system.exit(0);就不会执行该代码块
            mun++;
        System.out.println(mun);
    }
    System.out.println("...end.....");
    mun++;
    return mun;
    }
}

2、抛出异常
抛出异常的方式有两种:
1):在方法的内部使用throw,抛出一个异常对象.如果抛出的异常是一个编译时期异常,就必须在方法后面声明抛出的异常类型,如果是运行时期的异常就不需要声明异常类型
如下面的程序,可能出现的编译时期异常有FileNotFoundException,与ArithmeticExcepting.就必须在方法后面声明,否则编译出错

Java基础之异常处理机制_第1张图片
Paste_Image.png

如果出现的异常为编译时期异常时,我们还可以将其转换成运行时期异常就不用在方法后面声明了。例如:

Java基础之异常处理机制_第2张图片
Paste_Image.png

JDK1.7中的throw的新特性:如果throw抛出的真实异常是编译时期异常也必须在方法后面声明异常类型

Java基础之异常处理机制_第3张图片
Paste_Image.png

2):在方法上使用throws声明可能抛出的异常类型.
这个方法是将异常交给调用者,此异常为非运行时期异常。一旦使用throws,当前方法就不再过问该异常,交给调用者处理。

你可能感兴趣的:(Java基础之异常处理机制)