学习笔记-基础知识6-异常

来源:互联网 发布:程序员需要会什么 编辑:程序博客网 时间:2024/04/29 18:32

异常
1.异常
异常:就是不正常,是指程序在运行时出现的不正常情况。其实就是程序中出现的问题。
异常就是java按照面向对象的思想将问题进行对象封装。这样就方便于操作问题以及处理问题。
每一个问题都有名称,同时还有问题描述的信息,问题出现的位置,所以可以不断的向上抽取。形成了异常体系。
异常的体系Throwable:
–Error
通常指JVM出现重大问题如:运行的类不存在或者内存溢出等。
不需要编写针对代码对其处理,程序无法处理。
–Exception
在运行时运行出现的一些情况,可以通过try,catch,finally 处理
异常处理两种方式:
捕获异常:try catch 直接处理可能出现的异常!
声明异常:throws 声明告诉调用者可能的异常,暴露问题,调用者自己处理!

2.异常处理格式
异常处理的5个关键字:try ,catch,finally,throw, throws
捕获异常:先捕获小异常再捕获大异常。
异常处理格式:
try
{
//可能出异常的代码
}
catch(异常类对象)
{
//处理该异常类型的语句
}
finally
{
//一定会执行的代码
}

3.多异常处理
声明异常时尽可能声明具体异常类型,方便更好的处理;
方法声明几个异常就对应有几个catch 块;
若多个catch块中的异常出现继承关系,父类异常catch块放在最后;
在catch语句块使用Exception类作为异常类型时:
所有子类实例都可以使用父类接收(向上转型),即所有的异常对象都可以使用Exception 接收;
在java处理多异常时捕获小范围的异常必须放在大范围异常之前。

4.异常的分类
异常分类:
编译时被检查异常; —> Checked异常,在程序中必须使用try…catch 处理;
编译时不被检测的异常; —> Runtime异常,可以不使用try…catch 处理,但一旦出现异常就将由JVM处理。
Runtime异常:
RuntimeException(运行时异常)是指因设计或实现方式不当而导致的问题.
就是程序员造成的,是完全可以避免的异常。
特点:
编译器不会检查它,也就说程序中出现这类异常的时候,即使不处理也没有问题,
但是一旦出现异常,程序将异常终止,若采用异常处理,则会被相应的程序执行处理.
Checked异常:
除了RuntimeException以及子类,其他的Exception及其子类都是受检查异常,称为非RuntimeException 异常.
特点:
Java编译器会检查它,一旦出现这类异常,要么try-catch捕获,或throws声明抛出,程序要求必须处理.

5.声明异常(throws)
在可能出现异常的方法上声明抛出可能出现异常的类型:
声明的时候尽可能声明具体的异常,方便更好的处理.
当前方法不知道如何处理这种异常, 可将该异常交给上一级调用者来处理(非RuntimeException类型的异常)。
方法一旦使用throws声明抛出方法内可能出现的异常类型, 该方法就可以不再过问该异常了;
一个方法调用另一个使用throws声明抛出的方法,自己要么try…catch , 要么也throws;
格式:
public 返回值类型方法名(参数列表…)throws 异常类A,异常类B…
{}

6.throw
自行抛出一个异常对象,抛出异常类的对象;
若throw抛出的是Runtime异常:程序可以显示使用try…catch 来捕获并处理,也可以不管,直接交给方法调用者处理;
若throw抛出Checked异常:要么放在try里自己处理,要么放在一个throws声明的方法里面,交给调用者处理。

throws & throw    throws用于在方法上声明该方法不需要处理的异常类型。    throw用在方法内于抛出具体异常类的对象。    throws与throw 的区别:        thorws用在方法上,后面跟异常类名,可以是多个异常类。        throw用在方法内,后面跟异常对象,只能是一个。

7.finally
异常的统一出口:finally块总会执行。
不要在finally中使用return或throw语句,否则将会导致try、catch中的return或throw失效。
finally代码块只在一种情况下不执行:System.exit(0);

8.throw和catch同时使用
当异常出现在当前方法中,程序只对异常进行部分处理,还有一些处理需要在方法的调用
者中才能处理完成,此时还应该再次抛出异常,这样就可以让方法的调用者也能捕获到异常;

0 0
原创粉丝点击