您的位置:首页 > 职场人生

黑马程序员—java技术blog—第三篇:异常

2014-08-01 13:54 204 查看
---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

一、异常

其实异常就是java通过面向对象的思想将问题封装成了对象。

用异常类对其进行描叙。

不同的问题用不同的类进行描叙。

二、异常-体系

将其共性进行向上抽取,形成异常体系。

最终问题(不正常情况)就分成两类

Throwable:无论是error,还是异常,问题,问题发生就该可以抛出,让调用者知道并处理。

//该体系的特点就在与它和它的所有子类都具有可抛性。

其实主要通过 throws throw这两个关键字才体现的,被这两个关键字所操作的对象和类都具有可抛性。

|--1,一般不可处理的,Error

特点:是有jvm抛出的严重性的问题。

这种问题发生一般不针对性处理,直接修改程序。

|--2 一般可以处理的,Exception

例:

角标越界

if(index>arr.length)

{

throw new ArrayIndexOutOfBoundsException("角标越界";+index);

}

指针为空

if(arr==null)

{

throw new NullPointerException("角标越界";+index);

}

三、自定义异常:

按照java异常的创建思想,面向对象,将负数角标进行自定义描叙,并封装成对象。

注意:如果让一个类成为异常类,必须继承异常体系,因为只有异常体系的子类才能被throws throw这两个关键字操作。

class FuShuIndexException extends Exception

{

FuShuIndexException () {

}

FuShuIndexException (String msg)

{

}

}

调用自定义的异常类 要么捕捉 要么申明

public int method(int[]arr,index)throws FuShuIndexException{

}

public static void main(String[] args) throws FuShuIndexException{

}

四、异常分类

1.编译时被检测异常:只要是Exception中和其子类都是,除了特殊子类RuntimeException体系。

2.编译时不检测异常(运行时异常):就是Exception的子类RuntimeException体系。

这种问题的发生,无法直接让功能继续,运算无法进行,更多是因为调用者的原因导致的而或者引发了内部状态的改变而导致的。

那么这种问题一般不处理,直接编译通过,在运行时,让调用者调用时的程序强制停止,让调用者对代码进行修正。

在自定义异常时 要不继承 Exception或RuntimeException(后者不需要申明)。

捕捉:可以对异常进行针对性处理。把问题解决后程序继续运行

具体格式:遇到多个catch 按写的顺序来查找 父类的catch放在最后面 catch(Exception e){}

try

{

//需要被检测异常的代码

}

catch(异常类 变量)

{

//处理异常的代码

}

finally

{

//一定会被执行的代码

}

public int method(int[]arr,index)throws FuShuIndexException{

}

public static void main(String[] args) {

try

{

int num=d.method(arr,-3);

System.out.println("num="+num);

}

catch( FuShuIndexException e)

{

System.out.println("负数角标异常");

//return; 这是finally仍进行

// System.exit(0);退出jvm(虚拟机)这是finally不执行

}

finally

{

}

}

什么时候用 catch,什么时候用thorws?

功能内容可以解决 用catch。

解决不了,用throws告诉调用者,由调用者解决。

子类继承父类时应该注意的问题?

1.子类在覆盖父类的方法时,父类如果抛了异常,子类只能抛出该异常或者抛出父类子类的异常,可以不抛。

2.子类抛出的异常应该是父类异常的子集。

----- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net/heima" target="blank">http://edu.csdn.net/heima</a>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: