黑马程序员-----------JAVA基础-------异常机制

来源:互联网 发布:怎样加入淘宝网全球购 编辑:程序博客网 时间:2024/05/29 04:37

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

异常机制

1 异常:程序在运行时出现的不正常情况。java将这种情况抽取并封装成类即Exception和Error类。

Throwable------>所有错误和异常的超类。

|--Error------> 对于严重的问题用Error类表示,一般不用编码进行处理。

|--Exception------------->对于非严重的问题用Exception表示,一般需要处理(RuntimeException除外)。

2 异常的处理

异常有两种处理方式:一种是try catch代码块在内部处理;一种是用throws抛出异常让之后调用此方法的人去处理。

一些常见的处理方式:

1)String getMessage()    --->异常名称;2)String toString() --------->异常名称:异常信息3)void printStackTrace()------>异常名称:异常信息:异常出现位置(默认处理方式)。
3 throws

public int div(int a , int b) throws Exception
{                  .......}
在方法上通过throws声明该功能可能会出现某些问题,调用者在调用函数时就必须要处理(或try或抛(throw))。

注:

1.异常声明时最好声明具体,这样在处理的时候也可以有更具体的处理方式。

2. 一个方法可能会抛出多个异常,此时就应该对应多个catch()块,由于异常可能会有继承关系,应该把父类的异常放在catch块的后面。

3.处理方式最好具体,在很对情况下,捕捉到异常后需要对其包装再抛出新的可以处理的异常。

4.自定义异常

在项目中会出项特定的异常问题,此时就需要自定义异常。

1.异常必须继承Exception或它的子类;

2.异常初始化时可以调用父类的构造函数;

3 函数内部出现throw 抛出异常对象,需要处理(或try或抛)。

class FuShuException extends Exception{      private String massage;      public FuShuException(String massage)      {                    super(massage);       }}
5.throw 和throws的区别

1 throws用在函数上,throw用在函数内;

2 throws 后面跟的是异常类(可以抛出多个异常类,用逗号隔开),throw后面跟的是异常对象;

3 函数内有throw抛出异常对象,函数上需要声明throws 。(有一个类型的异常除外:RuntimeException)。


6 RuntimeException

Exception中有一个特殊的异常类RuntimeException(运行时异常)。函数内如果抛出次异常,函数上不需要throws声明。

如果声明了,调用者也可以不对其进行处理。

因为RuntimeException异常如果发生就希望程序自然停止,然后由程序员对代码进行修改。

所以如果我们定义异常时,希望异常发生时不进行继续的运算,就可以让异常继承自RuntimeException。

由此我们得到异常的分类:

1 编译时被检测的异常(需要throws声明);

2 运行时异常,编译时不进行检测(RuntimeException)。

class NoValueException extends RuntimeException{NoValueException(String message){super(message);}}interface Shape{void getArea();}class Rec implements Shape{private int len,wid;Rec(int len ,int wid)//throws NoValueException{if(len<=0 || wid<=0)throw new NoValueException("出现非法值");this.len = len;this.wid = wid;}public void getArea(){System.out.println(len*wid);}}class Circle implements Shape{private int radius;public static final double PI = 3.14;Circle(int radius){if(radius<=0)throw new NoValueException("非法");this.radius = radius;}public void getArea(){System.out.println(radius*radius*PI);}}class  ExceptionTest1{public static void main(String[] args) {Rec r = new Rec(3,4);r.getArea();Circle c = new Circle(-8);System.out.println("over");}}

7 异常处理语句

处理语句有三种形式:

1. try<span style="font-family: Arial, Helvetica, sans-serif;">{  放置可能会抛出异常代码;</span>
}catch(捕捉到的异常对象如:Exeption e){ 异常处理语句;}2. try{}catch(){}finally{ 存放一定会执行的代码,一般可以用于释放计算机资源;}3. try{}finally{}
8 异常在子父类覆盖中的体现:

1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,这只能跑出父类方法的异常或者其子类。

2. 如果父类方法抛出多个异常,那么子类的覆盖方法只能抛出父类异常的子集。

3 如果父类方法没有异常抛出,那么子类的覆盖方法也不能抛出异常。如果该方法确实可能抛出异常,只能在内部try-catch处理,不能声明。

9 总结

异常时对问题的描述,对问题进行对象的封装。

异常体系

Throwable

|--Error

|--Exception

throws和thorw的区别:一个对象一个类,一个函数内一个函数外,出现throw需要声明throws,RuntimeException除外。

异常的好处:

1 将问题进行了封装;

2.将正常的流程代码和问题处理代码分离,方便阅读。

异常处理机制:或抛throws 或try;

抛出多个异常需要catch多个,父类异常放在后面;

3 catch的异常还是无法处理时可以在catch代码块里继续抛出新的异常。





0 0
原创粉丝点击