分享
 
 
 

java 异常处理学习笔记

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

java异常处理学习笔记

如果你对异常已经很了解,就不用看了。这是写给初学者看的。

基础知识

在程序运行时,常常会出现一些非正常的现象,这种情况称为运行错误。根据其性质可以分为错误和异常。

错误:常见的有程序进入死循环,内存泄漏等。这种情况,程序运行时本身无法解决,只能通过其他方法干预。对应的类为Error类

异常:常见的有除数为0,数组越界等。这种情况,不向错误那样,程序运行时本身可以解决,由异常代码调整程序运行方向,使程序仍可继续运行直至正常结束。对应的类为Exception类。

抛出异常:当程序发生异常时,产生一个异常事件,生成一个异常对象,并把它提交给运行系统,再由运行系统寻找相应的代码来处理异常,这个过程称为抛出异常。

捕获异常:异常抛出后,运行时系统从生成对象的代码开始,沿方法的调用栈逐层回溯查找,直到找到包含相应处理的方法,并把异常对象交给该方法为止,这个过程称为捕获异常。

五大模板

使用try—catch—finally语句捕获和处理异常

try try try

{ { {

…… …… …….

} } }

finally catch(Execption e) catch(Execption e)

{ { {

…… …… …….

System.out.system(0); } }

} finally

{

模板一(不推荐使用) 模板二 …….

}

模板三

try try

{ ……. {

} …….

catch(Execption的子类1 e) }

{ catch(异常类1 e)

} {

catch(Execption的子类2 e) try

{ {

} ………

catch(Execption e) }

{ cathch(异常2 e )

} {……..}

finally }

{ finally

…….. { ………..}

}

模板四 模板五

图一 五大模板

对模板的一点解释:

1. try语句 当某段代码在运行时可能产生异常的话,应该把这段代码放到try语句中去。但不要把所有的语句放到try语句中,因为粒度太大。

2. catch语句 其中的参数类似于方法的声明,包含一个异常类型和一个异常对象。异常类型必须是Throwable类的子类,当然也可以是自己自定义的异常类。

A. 一个try语句下面可以有多个catch语句,分别处理不同的异常。但排列顺序必须是从特殊到一般,最后一个一般都是 Exception类(模板四)。

B. 也可以用一个catch语句处理多个异常类型,这时它的异常类型参数应该是这些异常类型的超类(模板三)。

C. java运行时系统从上到下分别对每个catch语句处理的异常类型进行检测,直到找到与类型匹配的catch语句为止。 匹配是指catch所处理的异常类型与所生成的异常类型完全一致或是它的超类。

D. 如果程序所产生的异常和所有的catch处理的异常都不匹配,则这个异常将由java虚拟机捕获并处理,此时与不使用异 常处理是一样的。

3. finally语句 在try所限定的代码中,当抛出一个异常时,其后的代码不会被执行。通过finally语句可以指定一块代码。无论try所指定的程序块中抛出或不抛出异常,也无论catch语句的异常类型是否与所抛出的异常的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。该语句也是可以省略的(模板二)。

4. 异常语句嵌套 当在处理异常时很有可能再次抛出异常,这种现象是非常常见的。常见形式为模板五。

常见的异常类

大家也许在编程的过程中,会意识到这里出错,但不知道会抛出什么异常,也是一件头疼的事,现将这部分总结如下:

算术异常类:ArithmeticExecption

空指针异常类:NullPointerException

类型强制转换异常:ClassCastException

数组负下标异常:NegativeArrayException

数组下标越界异常:ArrayIndexOutOfBoundsException

违背安全原则异常:SecturityException

文件已结束异常:EOFException

文件未找到异常:FileNotFoundException

字符串转换为数字异常:NumberFormatException

操作数据库异常:SQLException

输入输出异常:IOException

方法未找到异常:NoSuchMethodException

这是最常见的一些异常,大家可以在日后的使用中总结,但最详细的恐怕还是JDK的文档了。还是看JDK的文档吧:);

Exception 异常类的方法

Public class Exception extends Throwable

构造方法:public Exception()

public Exception(String s)

实例方法:public String getMessage()

public void printStackTrace()

throw 与 throws的区别与联系

区别一:throw 是语句抛出一个异常;throws 是方法抛出一个异常;

throw语法:throw <异常对象>

在方法声明中,添加throws子句表示该方法将抛出异常。

throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]

其中:异常类可以声明多个,用逗号分割。

区别二:throws可以单独使用,但throw不能;

区别三:throw要么和try-catch-finally语句配套使用,要么与throws配套使用。但throws可以单独使用,然后再由处理异常的方法捕获。

自定义异常类

跟声明一个类一样,但必须是继承于Exception类。可以用throw 和throws抛出这个自定义的类。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有