【马士兵】笔记_Java异常Exception

有道云笔记 连接:

http://note.youdao.com/noteshare?id=bac76e412bc224421df02109ac3bacca


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以下可忽略:



笔记 异常Exception.doc

《异常处理Exception 1

 

异常:运行期出现的错误。
区别于编译期间的语法错误,标点的全半角等。
往往是程序与用户交互时,由于用户的某一操作、输入值等,使程序运行产生错误。

调试:Java程序不是写出来的,是调试调出来的
就是程序在编译、运行、测试时报错,改错,再出错改错的过程。
注意,观察错误的名字和行号最重要。

Java处理Exception的方式:
当程序运行到某处,JVM检测到某错误,如数组下标越界(注意C语言等不会报错,安全性不如Java);它会把错误相应的Exception类,这里即ArrayIndexOutOfBoundsException抛出(throws;如果程序不捕获此异常,则直接抛出到显示界面,提示错误信息。这样任由错误抛出显示出来,不利于用户理解,要尽量catch

 

 

 

 

 

 

《异常Exception_2

  1.  方法后加throws ***Exception,用来注明该方法可能抛出的异常。

egjava.io.File类的方法public void read() throws IOException;

构造方法public FIleString url会抛出 NullPointerException

 

随之,在方法体里面需手工加上:在什么情况下初始化并抛出这个异常对象。

egif(。。。。){

throw new IOException异常);

}

最后,在此方法被调用时,需被try...catch块包围,捕获并定义怎么处理该异常。

  2.  异常的分类

Throwable:根父类。

ErrorJVM错误,不可捕捉。

 

RuntimeException:一些极常见的Exception,抛出后可不catch,以提编程成效率。

其它的Exception:如IOException,一旦在方法体中throws IOException,则在调用此方法时必须catch

注意1在使用一些库里面的类时,这个类可能throws了某种非RuntimeException,则在使用时必须try...catch,否则编译时报错。

egFileInputStream类在初始化时,必须被try...catch异常FileNotFoundException

注意2在一段try...catch块中,可能调用了不止一个throws了某非运行时异常的方法,则需分别catch它们。

注意3RuntimeException,必须被捕捉,但可以不处理,再throws出去,供下个调用者处理。

 

  3.  finally{...}

finally的内容总会执行,无论try中的方法抛出什么异常,哪里抛出异常。它为异常处理提供统一的出口。

通常finally中语句执行资源清理工作:关闭打开的文件,删除临时文件等。常是:if文件打开) 文件关闭;

 

此图,左边:

进入try,执行语句1时出现了SomeException2异常,跳入相应的catch中,然后执行finally的语句。期间:语句2不执行,finally一定会执行。

右边:两个catch{}不执行。

 

  4.  catch{}常用的两个方法

getMessage()得到有关异常时间的信息。

printStackTrace()来跟踪异常时间发生时执行堆栈的内容。也就是,如果A方法调用B方法时出现异常,则把AB的信息都打印出来。包含了getMessage()的内容。

 

上图,打印的是堆栈信息。应注意和后面的行号。其实提示的一系列信息,都只是某一个错误。

 

 

  5. 抛出两种以上异常

egpublic void func(String url

throws FileNotFoundException ,IOException{

...

File f = new File(url);

f.read();

...

}

这个方法抛出了两个异常。可以只抛出IOException,因为FileNotFoundException是其子类。但是,建议写两个,因为便于调用者写对应具体异常的catch方法。良好的编程习惯。

注意:catch的时候两个异常有先后顺序,先FileNotFoundExceptionIOException。否则捕捉不到FIleNotFoundException

即:try{

x.Func();

}catch(FileNotFoundException e){

system.out.println(e.getMessage());

}catch(IOException e){

e.printStackTrace();

}

  

  6.  catch语句不建议为空

可以catch后什么也不写,但这样的话,一个异常就被永久得忽视掉了,是不好的变成习惯。简单的getMessage()即可。使用log4j的话可以把错误信息输出到log文档里。

注意:main()方法也可throws Exception,这时所有异常被抛给Java运行时系统,默认打印出堆栈信息。最无脑的方法是一直throws Exception,因为都是Exception的子类。

 

  7. 自定义Exception

 

eg

 

 

  8.  重写方法时Exception怎么办?

 

注意:范围大了,范围小了,数量多了都不行。但是什么异常都不写可以,写的话必须跟父类方法的异常类型完全一样。

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值