1.异常:就是程序运行过程中出现的不正常情况。
异常的由来:问题本身也是日常生活中一个具体的事物,也可以通过java类的形式进行描述,并封装成对象。
其实,就是java对不正常情况描述的对象体现。
对于问题的划分:一种是严重性问题,一种是非严重性问题。
对于严重的,java用Error类进行描述。
对于Error类一般不写针对型代码对其进行处理。
对于非严重的,java通过Exception类进行描述。
对于Exception类可以使用针对性处理方式进行处理。
无论Error类还是Exception类都有一些共性内容,
比如不正常情况的信息,引发原因等。
Throwable
--Error
--Exception
2.异常的处理
java中提供了特有的语句进行处理:
try
{ 需要被检测的代码;}
catch(异常类名 变量)
{处理方式; }
finally
{一定会执行语句; }
3.对捕获到的异常对象进行常见方法操作。
getMessage();获取异常的信息
toString();异常名称:异常信息
printStackTrace();打印异常在堆栈中的跟踪信息,包括异常名称,异常信息,异常出现的位置。
其实JVM默认的异常处理方式就是调用printStackTrace()。
在方法上声明异常,
便于提高安全性,让调用处进行处理,不处理则编译失败。
对多异常的处理
1.声明异常时,最好声明为更具体的异常类型,这样也能处理的更为具体。
2.对方声明几个异常,就对应几个catch块。
如果多个catch块中的异常有继承关系,使用父类异常的catch块放在最后面,因为catch块是按顺序处理的。另外,不要定义多余的catch块。
建议进行catch处理时,catch中一定要定义具体的处理方式,不要简单地定义一句e.printStackTrace();
也不要简单地就写一条输出语句。
自定义异常
因为项目中可能出现特有的问题,而这些问题并没有被java所描述并封装成对象,所以对于这些问题,可以按照java中对问题封装的思想,将特有的问题进行自定义的异常封装。
自定义异常类应该继承Exception。
继承Exception的原因:
因为异常类和异常对象都需要被抛出,它们都具备可抛性,这是Throwable体系所具有的特性。
这有这个体系中的类和对象才可以被throw和throws操作。
当在方法内部出现了throw抛出异常对象,那么就必须要给出对应的处理动作。
要么在内部用try,catch处理;
要么在方法上声明让调用者处理。
一般情况下,方法内部出现异常,方法上需要声明。
throws和throw的区别
throws 使用在方法上(小括号和大括号之间);
throw使用在方法内部。
throws后面跟的异常类名,可以跟多个,中间用逗号隔开。
throw后面跟的是异常对象。
Exception中有一个特殊的子类RuntimeException(运行时异常),
如果在方法内部抛出该类或者其子类异常,可以不再方法上声明,编译也可以通过;
如果在方法上声明该类或其子类异常,调用者可以不用进行处理,编译一样通过。
之所以不需要再方法上进行声明,是因为不需要调用者进行处理。
当该异常发生,程序就会停止运行,因为在运行时出现了无法继续运算的情况,希望停止程序后,对代码进行修改。
自定义异常时,如果该异常的发生,使程序无法继续运行下去时,
就让该自定义异常继承RuntimeException。
对于异常分为两种:
1.编译时被检测到的异常。
2.编译时无法被检测到的异常。(运行时异常。及RuntimeException及其子类)