java异常处理

java异常处理

java异常体系

异常体系

Java的所有异常继承自Throwable,分为error(错误)和Exception(异常),Exception又分为可查异常不可查异常,可查异常指的是编译器可以检查处理来,在编写代码的时候需要进行处理,不可查异常指的是运行时异常例如NullException(空指针异常)在编写代码的时候可以不处理;error一般是jvm(虚拟机)错误不能处理,异常指的是一般可以被程序处理。

try catch finally

分析一下代码,说明输出:

示例一

package xuelongjiang.baseGrama.exceptiondeal;

/**
 * @Author xuelongjiang
 */
public class SimpleException {


    public static void main(String[] args) {

        SimpleException simpleException = new SimpleException();

        System.out.println(simpleException.exceptionTest(0));
    }

    public int  exceptionTest(int a2) {

        System.out.println("a2除数:"+a2);
         int a1  = 0;

         try {
         a1 = 10/a2;
         System.out.println("处理正常。。。。。");
         return a1;

         }catch (Exception e){
             System.out.println("异常被抓住了。。。。。");
             return 0;
         }finally {
             System.out.println("进入finaly。。。。。");
             System.out.println("a1:"+a1);
             return 100;
         }
    }

}

输出结果:

a2除数:0

异常被抓住了。。。。。

进入finaly。。。。。

a1:0

100

示例二

package xuelongjiang.baseGrama.exceptiondeal;

/**
 * @Author xuelongjiang
 */
public class SimpleException {


    public static void main(String[] args) {

        SimpleException simpleException = new SimpleException();
        try {
            System.out.println(simpleException.exceptionTest(0));

        }catch (Exception e){
            System.out.println("最外层的catch。。。。");
        }


    }

    public int  exceptionTest(int a2) throws  Exception {

        System.out.println("a2除数:"+a2);
         int a1  = 0;

         try {
         a1 = 10/a2;
         System.out.println("处理正常。。。。。");
         return a1;

         }catch (Exception e){
             System.out.println("异常被抓住了。。。。。");
             throw  e;
             //return 0;
         }finally {
             System.out.println("进入finaly。。。。。");
             System.out.println("a1:"+a1);
             return 100;
         }
    }

}

输出:

a2除数:0

异常被抓住了。。。。。

进入finaly。。。。。

a1:0
100

示例三

package xuelongjiang.baseGrama.exceptiondeal;

/**
 * @Author xuelongjiang
 */
public class SimpleException {


    public static void main(String[] args) {

        SimpleException simpleException = new SimpleException();
        try {
            System.out.println(simpleException.exceptionTest(0));

        }catch (Exception e){
            System.out.println("最外层的catch。。。。");
        }


    }

    public int  exceptionTest(int a2) throws  Exception {

        System.out.println("a2除数:"+a2);
         int a1  = 0;

         try {
         a1 = 10/a2;
         System.out.println("处理正常。。。。。");
         return a1;

         }catch (Exception e){
             System.out.println("异常被抓住了。。。。。");
             throw  e;
             //return 0;
         }finally {
             System.out.println("进入finaly。。。。。");
             System.out.println("a1:"+a1);
             //return 100;
         }
    }

}

输出:

a2除数:0

异常被抓住了。。。。。

进入finaly。。。。。

a1:0

最外层的catch。。。。

根据以上代码给出结论:

如果有finally即使try 和catch中有return也不会返回,而是返回finally中的return
如果finally中没有return语句,并且try和catch中有返回语句或throw那么会执行try,catch中的返回

throw throws

在上面的示例中,我们看到了throws和throw的用法,有时方法没有能力处理异常,需要向上抛出异常,由其他方法来处理异常。

throw 检查异常处理的时候,如果使用throw 那么必须使用throws .
throw 用于方法中, thows用于方法的签名。

总结

如果异常处理太多会影响正常代码的阅读,一般建议专门有个异常处理的方法,来处理异常。而产生异常的方法只需要抛出代码,这样能极大的方便阅读代码,及整洁代码。

你可能感兴趣的:(java)