Java异常

作者: 奔跑的笨鸟 | 来源:发表于2017-06-14 23:15 被阅读11次

    异常:程序出现了没有足够信息能继续执行,或者不能按照正常逻辑执行
    Java 异常机制,使得我们能在某个地方集中处理要解决的问题。

    异常种类:检查时异常,运行时异常
    检查时异常,我们必须catch或者抛出,运行时异常不用显示捕捉。
    常见运行时异常有:ClassCastException, DateTimeParseException, IllegalArgumentException, ArrayIndexOutOfBoundsException, NullPointerException等。
    异常的基类是Throwable, 这个类有2个子类,一个是Error, 另一个是Exception
    在实际中我们需要自定义异常类,可以继承Exception或者Throwable。
    一个自定义异常的例子:

    class CannotOpenException extends Exception{
    
        private static final long serialVersionUID = 4893739257004490618L;
    
    }
    
    public class TextException {
        public void throwException() throws CannotOpenException{
            System.out.println("do something");
            throw new CannotOpenException();
        }
        
        public static void main(String[] args) {
            try {
                new TextException().throwException();
            } catch (CannotOpenException e) {
                e.printStackTrace();
            }finally {
                System.out.println("Do some clean up.");
            }
        }
    
    }
    
    

    执行结果:

    do something
    Do some clean up.
    CannotOpenException
        at TextException.throwException(TextException.java:11)
        at TextException.main(TextException.java:16)
    

    有时候使用不当,异常会丢失,常见的问题是在finally执行了return

    class CannotOpenException extends Exception{
    
        private static final long serialVersionUID = 4893739257004490618L;
    
    }
    
    public class TextException {
        public void throwException() throws CannotOpenException{
            try{
            System.out.println("do something");
            throw new CannotOpenException();
            }finally {
                return;
            }
        }
        
        public static void main(String[] args) {
            try {
                new TextException().throwException();
            } catch (CannotOpenException e) {
                e.printStackTrace();
            }finally {
                System.out.println("Do some clean up.");
            }
        }
    
    }
    

    执行结果:

    do something
    Do some clean up.
    
    

    异常的继承

    • 子类可以不用声明任何异常如果不调用基类的方法。如果声明只能是基类的类型。
    • 构造函数可以声明任何异常,但必须包含基类的异常。
    
    class CannotOpenException extends Exception {
    
    }
    
    class CannotReadException extends Exception {
    
    }
    
    class CannotWriteException extends Exception {
    
    }
    
    abstract class BaseClazz {
        public BaseClazz() throws CannotOpenException{
            
        }
        public void read() throws CannotReadException {
    
        }
    
        public void write() throws CannotWriteException {
    
        }
    }
    class SubClazz extends BaseClazz{
    
        public SubClazz() throws CannotOpenException,CannotReadException,CannotWriteException {
            //构造方法必须包含基类异常,但是可以抛出其他任何异常
        }
    
        @Override
        public void read() throws CannotReadException {
            super.read();//必须并且只能和基类的异常一样
        }
    
        @Override
        public void write()  {
            //如果不調用super方法,可以不抛出基本的异常
        }
        
    }
    

    相关文章

      网友评论

        本文标题:Java异常

        本文链接:https://www.haomeiwen.com/subject/orieqxtx.html