现在的位置: 首页 > 综合 > 正文

java中异常的处理总结(二)

2014年03月14日 ⁄ 综合 ⁄ 共 3396字 ⁄ 字号 评论关闭
package com.eric.exception;

 

/**

 * 本类的目的主要包括4点

 * (1)try 后面可以没有catch而是只有finally code block[noCatchTryBolck method]

 * (2)if inherit class override method from

 * super class and need to throw exception, that's exception must compatible with parent class method exception[test1,test2]

 * 主要原因是因为如果某个方法是用了父类作为参数,而且捕获了其方法抛出的异常,如果子类方法的异常范围大于或者是和其不兼容, 则将父类作为参数的方法将不能正确处理子类所抛出的异常,所以java强制这一特性

 *

 * (3)INHERITCLASS.method.limit>=SUPERCLASS.method.limit(for override)[test3]

 * 如果子类的覆盖方法的访问权限比超类的访问权限低,则有可能在可以访问超类方法的地方却不能访问到子类的方法,所以这一点需要强制执行 例如 超类的方法a的权限是public

 * 而子类覆盖了其方法而且将权限设置为protected,则如果某个包外部方法调用了用超类作为参数,则此时在执行的时候便会访问不到子类的a方法

 * (4)对于静态内部类的非静态方法的方法方式

 *  new ExceptionFeatures.InheritClass().test1();

 *

 *

 * */

 

public class ExceptionFeatures {

    public static final String PCE_VERSION_CONTROL = "@(#) $RCSfile: $, $Revision: $, $Date: {1}quot;;

 

    public static void main(String[] args) {

        catchTryBolck();

        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>");

        try {

            exceptionWidely();

        } catch (ParentException e) {

            e.printStackTrace(System.out);

        }

        System.out.println(">>>>>>>>>>>>>>>>>>>>");

        noCatchTryBolck();

    }

 

    /**

     * 在try的结构中可以不包含catch语句

     * */

 

    static void noCatchTryBolck() {

        try {

            int a = 12 / 0;

        } finally {

            System.out.println("div by zero!");

        }

        System.out.println("out of finally");

    }

 

    /**

     * finally 语句块一定会被执行

     * */

    static void catchTryBolck() {

        try {

            int a = 12 / 0;

        } catch (ArithmeticException ex) {

            ex.printStackTrace(System.out);

        } finally {

            System.out.println("div by zero!");

        }

        System.out.println("out of finally");

    }

 

    /**

     * 子类的exception的范围不能比父类更广

     * @throws ParentException

     * */

 

    static void exceptionWidely() throws ParentException {

      new ExceptionFeatures.InheritClass().test1();

      new ExceptionFeatures.InheritClass().test2();

      new ExceptionFeatures.InheritClass().test3();

    }

 

    private static class ParentException extends Exception {

        ParentException() {

 

        }

 

        ParentException(String msg) {

            super(msg);

        }

    }

 

    private static class InheritException extends ParentException {

        InheritException() {

 

        }

 

        InheritException(String msg) {

            super(msg);

        }

    }

 

    private static class InheritException2 extends ParentException {

        InheritException2() {

 

        }

 

        InheritException2(String msg) {

            super(msg);

        }

    }

 

    private static class Parent {

        public void test1() throws ParentException {

            System.out.println("in parent.test1()");

            throw new ParentException();

        }

 

        public void test2() throws InheritException {

            System.out.println("in parent.test2()");

            throw new InheritException();

        }

        public void test3()  {

            System.out.println("in parent.test3()");

        }

    }

 

    private static class InheritClass extends Parent {

        /**

         * - overrides com.eric.exception.ExceptionFeatures.Parent.test1 - Exception InheritException2 is not compatible

         * with throws clause in ExceptionFeatures.Parent.test1()

         * */

        // public void test2() throws InheritException2 {

        // System.out.println("in InheritClass.test2()");

        // throw new InheritException2();

        // }

 

        /**

         * - overrides com.eric.exception.ExceptionFeatures.Parent.test1 - Exception InheritException2 is not compatible

         * with throws clause in ExceptionFeatures.Parent.test1()

         * */

 

        // public void test2() throws ParentException {

        // System.out.println("in InheritClass.test2()");

        // throw new ParentException();

        // }

 

        public void test2() throws InheritException {

            System.out.println("in InheritClass.test2()");

            throw new InheritException();

        }

        /**

         * 在父类的test1方法是抛出ParentException异常,由于InheritException是ParentException的子类,说以在InheritClass类中的test1方法是可以编译通过的

         * */

        public void test1() throws InheritException {

            System.out.println("in InheritClass.test1()");

            throw new InheritException();

        }

 

        /**

         * - Cannot reduce the visibility of the inherited method from ExceptionFeatures.Parent

         *

         * */

        // @Override

        // protected void test3(){

        //

        // }

 

        @Override

        public void test3() {

            System.out.println("in inherit class test3() method output");

        }

       

 

    }

 

}

 

/*

 *

 * History:

 *

 *

 *

 * $Log: $

 */


 

 

抱歉!评论已关闭.