Java异常

异常:程序出现了没有足够信息能继续执行,或者不能按照正常逻辑执行
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异常机制 - 代码之道,编程之法 - 博客频道 - CSDN.NEThttp://blog...
    葡萄喃喃呓语阅读 3,210评论 0 25
  • Java异常类型 所有异常类型都是Throwable的子类,Throwable把异常分成两个不同分支的子类Erro...
    予别她阅读 962评论 0 2
  • 本文将向读者介绍如何编写正确的异常处理程序,并将展示当方法出问题的时候,如何产生自定义异常。如有不对欢迎拍砖,谢谢...
    敢冲才不枉青春_Milo阅读 249评论 0 1
  • 问:java 异常有哪几种,特点是什么? 答:异常是发生在程序执行过程中阻碍程序正常执行的错误操作,只要在 Jav...
    Little丶Jerry阅读 618评论 0 0
  • 转载:http://www.cnblogs.com/lulipro/p/7504267.html 一、异常简介 程...
    SinX竟然被占用了阅读 996评论 2 2