具体问题、具体分析、没有万能的准则。糊涂,不知道对错,但在思考,时间会验证自己曾经的思考。
1、异常需要在第一次出现的地方被记录
2、尽量使用原生的异常。
3、使用异常?”使用“2个字怎么理解,抛出异常还是捕获异常?
4、又不捕获,又不抛出,RuntimeException的意义是什么?提示程序员这可能出现错误,注意代码质量?
一、什么时候使用Checked异常、Unchecked异常?
问题:使用Checked异常需要太多的try..catch块
使用Unchecked异常,编译器忽略,程序员不知道何种情况下该处理此异常。
方法:将异常的处理交给程序员自己判断,使用Uncheked Exception,有能力处理的调用者可以进行高级处理,一般调用者干脆就不处理。
在使用unChecked异常时,必须在在方法声明中详细的说明该方法可能会抛出的unChekced异常,由调用者自己去决定是否捕获unChecked异常
二、Unchekced exception需要被捕获吗?
通常情况下不应该,因为它代表的是代码的错误,应该通过编写代码解决,而不是异常。
如果捕获了Unchecked exception,违反了原子性。忽略了错误, 程序出现了错误就应该挂起。
三、页面传递来的参数,应该做null检查吗?
对于潜在的NullPoninterException,属于程序错误,没办法恢复,不应该捕获,应该用if判断之类的处理,而不是异常。
可以如下处理?还是忽略,等待调用的时候抛出?定义自己的错误,包装一下再抛出?
method(arg0,arg1){
if(arg0==null){
throw new NullPointerException();
}
}
四、如何处理SQLException异常?
try{
....
PrepareStatement.excuteQuery();
....
}catch(SQLException e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
}
五、此处潜在的NullPointerException该怎么处理?
List<ValueObject> objects=new ArrayList<ValueObject>();
List<Object[]> result=Query.list();
ValueObject obj=null;
try{
for(int i=0;i<result.size();i++){
Object[] temp=result.get(i);
pojo=new ValueObject();
pojo.setId(Integer.valueOf(temp[0].toString();)
pojo.setName(temp[1].toString());
//如果temp[1]为null,代码处理?if(null!=temp[1]){pojo.setName(temp[1].toString())}
pojo.setAge(Integer.valueOf(temp[2].toString()));
//如果valueOf("123!@#")的情况怎么处理?不可能出现这种情况(数据库类型已经限制,不可能有此类数据)。
}
}catch(NumberFormatException e){
throw new MyException("....(描述或者异常编号)",e);
//假设捕获了异常,需要返回吗?结果已经是不正确的,返回了也没任何意义。
//return objects();
}
六、什么情况下定义自己的异常?
J2EE项目中,一般分为MVC三层。一般我们都是在最底层进行JDBC调用,而每一个JDBC的调用都会抛出SQLException的checked异常。只要有一个JDBC调用,所有上层的接口都会要求抛出SQLException异常。因为我们处理SQLException的方式就是把它继续往上抛。这样一来就破坏了我们业务接口。
SQLException这些J2EE系统级的异常严重的影响了我们的业务接口。我们对系统进行分层的目的就是减少系统之间的依赖,每一层的技术改变不至于影响到其它层。
为了避免系统级的checked异常对业务系统的深度侵入,我们可以为业务方法定义一个业务系统自己的异常。针对
SQLException,RemoteException这些非常严重的异常,我们可以新定义一个unChecked的异常,然后把
SQLException,RemoteException封装成unChecked异常后抛出。
如果这个系统级的异常是要交由上一级调用者处理的,可以新定义一个checked的业务异常,然后把系统级的异常封
存装成业务级的异常后再抛出。
一般地,我们需要定义一个unChecked异常,让集成层接口的所有方法都声明抛出这unChecked异常。
定义一个checked的业务异常,让业务层的接口的所有方法都声明抛出Checked异常.
分享到:
相关推荐
深入理解java异常处理机制,很详细的,去了,你们的!
关于异常的定义和理解,各类异常的区分.等等
JDK1.7以上的异常体系,需要后续的不断总结和完善,学习jdk必备!
深入理解java异常(异常中的Error+异常中的Exception+检查异常+运行时异常+异常处理+throws关键字等)
理解异常的基础操作以及最简单的捕获处理 理解多异常捕获处理 理解声明抛出异常 掌握自定义异常 掌握异常处理注意事项 第1章 异常 什么是异常?Java代码在运行时期发生的问题就是异常。 在Java中,把异常信息封装成...
一、异常处理的理解? 异常处理是指程序在运行过程中,发生错误会导致程序退出,这种错误,就叫做异常。 因此处理这种错误,就称为异常处理。 二、异常处理如何操作? C# 异常处理时建立在四个关键词之上的:try、...
C#异常处理分析,简单易懂,例子详细,非常不错,希望对大家有用
或许从第一次使用异常开始,我们就要经常考虑诸如何时捕获异常,何时抛出异常,异常的性能如何之类的问题,有时还想了解究竟什么是异常,它的机制又是什么。本文试着对这些问题进行讨论。
里面讲述了 java 异常体系,简介,及流程,可以让你对异常更加理解
对java异常的工作过程进行详细解释,让初学者更好的掌握异常处理机制
俺花了N个大洋买来的,现在免费提供给大家
深入理解linux内核 中文版 第三版 第4章 中断和异常.pdf
深入理解java异常处理机制Java开发Java经验技巧共19页.pdf.zip
深入理解JVM内存区域与内存溢出异常
概念与实例相结合 让理解异常不再那么困难 适合新人阅读
深入理解Java异常体系Java系列2021.pdf
全面描述linux arm缺页异常的处理原理和处理方式,结合原理的解释描述以及全部相关的源码注释,深刻理解缺页异常
深刻理解 java 语言中独特的异常处理机制,掌握处理问题的方法。异常处理是java语言中一个独特之处,主要使用捕获异常和声明抛弃异常两种方法来处理程序中可能出现异常的语句块。
鉴于手性异常在粒子物理学以外的各个领域的最新应用,我们讨论了手性异常的一些基本方面,这可能有助于加深我们对粒子物理学中对手性异常的理解。 首先表明,Weyl模型H =vFσ→·p→(t)的Berry相(及其推广)在...
ARM支持7种异常。问题时发生了异常后ARM是如何响应的呢?下面一起来学习一下