由一句话带来的三种思考,起初看异常处理看得云里雾里,对于try catch()  更是不知所谓,最近看多线程以及到论坛查找,就这句话有了一些最基本的理解。 

   在java中,异常存在三种形式:

1、error,主要有jvm形成,不易捕获;

2、runtime exception,运行异常与环境有关,编译时无法检查,而且发生的情况复杂,JVM自动处理,无需人工捕获;

3、exception ,需要捕获的异常。

       首先exception 是程序应该捕获的异常,如果JVM产生了exception且没有捕获,那么程序将自动停止。try{ }中加入运行代码——可能会发生exception异常的的代码,如果这段代码存在异常,JVM将抛出这个异常,而catch( )将捕获抛出的异常,程序继续运行。换句话而言,try{}—catch()就是排除运行代码中的异常,catch(exception e)将抛出的异常显示出来。

throw与try catch

两者最大的区别就是throw直接抛出异常,无需自己处理,有程序以外的代码处理,至于什么异常开发者也不会知道,如果没有代码处理抛出的异常,程序将自动结束;

try catch可以捕获抛出的异常,并显示出来,开发者可以很明显的了解自己代码的异常。

 throw与throws

void doA(int a) throws Exception1,Exception3{
            try{
                  ......           }catch(Exception1 e){
               throw e;
            }catch(Exception2 e){
               System.out.println("出错了!");
            }
            if(a!=b)
               throw new  Exception3("自定义异常");
 }

代码中Exception1、 2、 3都可存在错误

如果产生Exception1异常,则捕获之后再抛出,由该方法的调用者去处理。
如果产生Exception2异常,则该方法自己处理了(即System.out.println("出错了!");)。所以该方法就不会再向外抛出Exception2异常了,void doA() throws Exception1,Exception3 里面的Exception2也就不用写了。
而Exception3异常是该方法的某段逻辑出错,程序员自己做了处理,在该段逻辑错误的情况下抛出异常Exception3,则该方法的调用者也要处理此异常。

throws是用在异常说明之后,若存在异常,将由方法的调用者执行;

throw是用在方法体内,抛出后由程序外的代码处理。

throws可能存在异常需要抛出,强调可能;

throw 则是抛出了一些具体的异常——一些已知的异常,执行throw代码就是抛出异常。