《Java编程思想》读书笔记(12)

本文探讨了Java中的异常处理机制,并对比了C语言中的错误处理方式。介绍了两种异常处理模型:中止模型和继续模型。通过代码示例展示了如何在Java程序中抛出和捕获异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前学c语言时,总是在自己写的函数里为程序的各种运行情况设置一个返回标志值,返回值可以是10等标志值,来根据这些标志值来判断程序是否正常运行,但代码多了就总是搞不清楚这些标志值之间的区别,因此代码就变得很难读了。而java用“异常处理”很好地解决了这个恼火的问题。

异常处理理论上划分为两种:中止模型(temination),也就是javac++采用的模型,它假定错误十分严重,因此无法回到错误的地方,只能抛出异常。还有一种就是“继续(resumption),它认为异常处理程序应该能对当前的运行环境进行修复,然后尝试上次出错了的方法。也就是说处理完异常后,希望能够继续运行当前指令。但这种模型的”耦合性“太大。

None.gifpackagecom.vitamin.Console;
None.gifimportjava.lang.
*;
None.gif
None.gif
publicclassexceptionTest
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif
/**//**
InBlock.gif*@paramargs
ExpandedSubBlockEnd.gif
*/

InBlock.gif
publicstaticvoidmain(String[]args)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
//TODOAuto-generatedmethodstub
InBlock.gif
try
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.giff();
ExpandedSubBlockEnd.gif}

InBlock.gif
catch(MyExceptionex)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifSystem.err.println(ex.getMessage().toString());
ExpandedSubBlockEnd.gif}

InBlock.gif
ExpandedSubBlockEnd.gif}

InBlock.gif
publicstaticvoidf()throwsMyException
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifSystem.
out.println("Hello");
InBlock.gif
ExpandedSubBlockEnd.gif}

InBlock.gif
ExpandedBlockEnd.gif}

None.gif

Java异常处理中存在着一个错误,如果用如下方式去使用的话就会出错:

None.gifpackagecom.vitamin.Console;
None.gifimportjava.lang.Throwable;
None.gif
None.gif
None.gif
publicclassexceptionTest
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif
InBlock.gif
publicstaticvoidmain(String[]args)throwsException
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
//TODOAuto-generatedmethodstub
InBlock.gif
try
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifg();
ExpandedSubBlockEnd.gif}

InBlock.gif
finally
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.giff();
ExpandedSubBlockEnd.gif}

ExpandedSubBlockEnd.gif}

InBlock.gif
publicstaticvoidg()throwsException
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
thrownewException("异常1");
ExpandedSubBlockEnd.gif}

InBlock.gif
publicstaticvoidf()throwsMyException
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
thrownewMyException("异常2");
InBlock.gif
ExpandedSubBlockEnd.gif}

InBlock.gif
ExpandedBlockEnd.gif}

None.gif
异常2把异常1给弄丢了!!!

在覆写一个方法时,只能抛出这个方法在基类中的版本所声明的异常,这样就可以实现多态性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值