异常的理解

本文探讨了异常处理的最佳实践,包括何时使用Checked与Unchecked异常、如何处理SQLException等特定异常、何时定义自定义异常等内容。

具体问题、具体分析、没有万能的准则。糊涂,不知道对错,但在思考,时间会验证自己曾经的思考。

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异常.

 

 

 

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值