Java中的异常
来源:互联网 发布:复读软件 编辑:程序博客网 时间:2024/05/16 01:15
Java中的异常
Java异常是我们编程中时时刻刻都要使用的特性,但是我们却很少去关注它细节的一些信息。
Exception架构
所有的异常都是派生至Throwable,最主要的2个继承类是Exception和Error。
我们常说的异常都是指Exception,Exception分为Check Exception和Unchecked Exception。
JDK文档中对Error中解释是:用于指示合理的应用程序不应该试图捕获的严重问题,大多数这样的错误都是异常条件。其中一个比较特殊的就是ThreadDeath,我们不应该去捕获这个异常,熟悉多线程编程的朋友一定会清楚其中的原因。
Check Exception和Unchecked Exception
之前在学习C++和C#的时候,所有的异常处理都属于Unchecked Exception,后来学习Java发现,Java语言对于某些异常强制要求声明methods会抛出什么异常,并且在需要强制捕获某些异常,这种异常就属于Check Exception。
关于什么时候应该使用Check Exception,什么时候应该使用Unchecked Exception很多人都有讨论,并没有一个统一的结论。不过绝大多数的观点是:混合使用。
使用Exception的常见错误
我们看看下面这段代码:
1:
2: // from http://gpcuster.cnblogs.com
3: InputStream input = null;
4:
5: try{
6:
7: input = new FileInputStream("myFile.txt");
8:
9: //do something with the stream
10:
11: } catch(IOException e){
12: throw new WrapperException(e);
13: } finally {
14: try{
15: input.close();
16: } catch(IOException e){
17: throw new WrapperException(e);
18: }
19: }
如果不存在myFile.txt文件的话,这段代码最终将会如果执行?
如果仔细考虑这个问题会非常有意思:
首先,在执行input = new FileInputStream(“myFile.txt”)的时候,抛出FileNotFindException。
然后,进入到catch段,将来抛出WrapperException,但还没有抛出这个异常。
最后,进入final段,这个时候,input是null的,所以将会抛出NullPointException。
通过这个剪短的分析,我们可以看出,最终的执行结果是抛出NullPointException。
更好地使用异常
如何更加高效地使用异常是一个大家关注的问题,这里主要有4点建议提供大家参考:
1 对catch住的异常进行包装和扩展。2 使用自定义的异常处理接口。
3 在catch异常的最上层记录异常日志。
4 使用异常处理模板。
- 【java】java中的异常
- Java中的异常处理
- java中的的异常
- java中的异常
- JAVA中的异常处理
- Java中的异常处理
- Java中的异常分类
- JAVA中的异常处理
- Java中的自定义异常
- Java中的异常
- java中的异常处理
- Java中的所有异常
- java中的异常
- JAVA程序中的异常
- java中的常见异常
- java 中的异常解析
- Java中的异常
- JAVA中的异常类型
- 服务器项目目录搭建,gradle 搭建项目web目录,source folder,folder相互转换,部署路径配置,
- [原]Android 系统应用Setting开发总结
- Java环境变量配置以及classpath详解
- 广度优先搜索 最短路径 队列
- 如何成为邮件营销“标题党”?
- Java中的异常
- 如何将本地代码上传到远程仓库
- 电脑无线(外网)和有线(内网)网络同时使用方法
- Eclipse快捷键 10个最有用的快捷键
- SpringMVC入门示例教程(二)
- 如何实现ListView 不写adpater也可以看到,也可以在布局界面看到listview的效果
- Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of
- mybatis mapper.xml 中查询出的status 赋值给枚举类型要装换
- 黑马程序员_Java语言_IO流