异常(exception):就是程序在运行时出现的不正常情况。 异常的由来:问题是现实生活中一个具体事物,也可以通过Java以类的形式进行描述,并封装成对象。
| 严重的:java通过ERROR类描述---------此时一般不处理 |
对于问题的划分:| | ----------> 向上抽取得到 类:Throwable
| 非严重的:java通过exception 类描述,-----进行针对性处理 |
在异常的Throwable 体系中,所以的类以及建立 的对象都具备可抛性,也就是可被 throw 和 throws 关键字操作,也只有异常体系有这个特点。
对于 throw 和 throws 的用法:throws 使用在函数上,其后跟的异常类,可以跟多个,用逗号隔开。
throw 使用在函数内,其后跟的是异常对象。
自定义异常:如果此时的异常发生时,可以不再进行运算,不作处理,就让该异常继承RuntimeException();(运行时异常)。 所以自定义的异常有两种类可以继承:Exception() 和 RuntimeException()。
当函数内抛出的异常属于RuntimeException()类及其子类的对象的时候,在函数上就不用再申明了。
对异常的处理:try
{有可能抛出异常的代码}
cathc(异常类变量)
{处理方法 } 如果try{}中没有抛出异常,则catch(){}就不执行。 对方申明了几个异常,就对应有几个catch(){}块, 如果多个catch块中的异常类存在着继承关系,那么包含父类的catch 块放在下面。
当然获取异常之后,如果不能处理,则也能抛出。在抛出时要注意,如果接到AException ,不能处理,但也不属于该功能的,则可以抛出另个BException异常。
如何定义异常信息?
因为父类已经将异常信息的操作都完成了,所以子类只要在构造时,将异常信息传递给父类通过super()语句。 那么就可以直接通过 MyException.getName()的方法获取自定义的异常信息。
class MyException extends Exception
{
MyException (String meg)
{ ----------------------------> 在之后 的函数中抛出MyException 异常的对象: throw new MyException(" 自定义的异常信息");
super(meg );
}
}
知识点:catch 块用于处理异常,如果没有catch 块就代表没有异常被处理
异常处理语句:1、try { } catch() { } finally { } 2、 try { } catch() { } 3、try { } finally { }
其finally{ } 中的是一定会执行的代码。
重要作用:不管是否有异常,还是有异常之后能否正确处理,对于占用资源的程序来说,最后都要关闭资源。 那么发生异常,程序中断时,就要用这个语句来关闭资源了。
只有一种情况下,finally{}中语句不执行::当finally前有:“System.exit(0);”时,此语句是系统退出语句,JVM结束。
异常的好处: 1、 将问题封装 2、 将正常运行的代码和处理问题的代码分离,方便阅读
异常在子父类覆盖时的注意事项:1、如果父类方法抛出异常,那么子类的覆盖方法只能抛出该父类的异常或异常的子类,或不抛。
2、如果父类方法抛出多个异常,那么子类方法只能抛出这些异常的子集
3,父类或接口的方法中没有抛出异常,那么子类也不可以抛, 如果子类中发生异常,那么必须try{} 处理,绝不能抛出。