`

异常的理解

阅读更多

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

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异常处理-自定义异常类及课后练习

    通过这些练习,可以加深对自定义异常理解和使用方法的掌握。 ### 三、小结与小悟 #### (1)小结:异常处理5个关键字 - `try`:包含可能抛出异常的代码块。 - `catch`:捕获并处理异常的代码块。 - `throw`:抛出...

    NCV5-日志异常技术红皮书_NC单据开发日志异常的红皮书_

    1. 日志异常理解:日志异常是指在系统运行过程中,通过日志记录的错误信息或不正常状态。这些异常可能源于代码错误、数据问题、配置失误或者系统资源不足等多种原因。识别日志异常的关键在于了解不同类型的错误代码...

    深入理解java异常处理机制

    ### 深入理解Java异常处理机制 #### 引言 异常处理机制是任何现代编程语言不可或缺的一部分,尤其是在像Java这样的面向对象的语言中更是如此。Java的异常处理机制旨在帮助开发者编写更健壮、更易于维护的代码。...

    异常定义分析,概念理解

    关于异常的定义和理解,各类异常的区分.等等

    java异常体系理解

    JDK1.7以上的异常体系,需要后续的不断总结和完善,学习jdk必备!

    MonteCarlo.rar_Monte Carlo_剔除异常值_异常值_异常样本剔除_蒙特卡洛 异常

    总之,蒙特卡洛方法为处理异常值提供了一种有力的工具,它允许我们在大量随机抽样中理解数据的内在结构,从而更准确地识别和剔除异常值。然而,这种方法也有其局限性,例如假设数据分布,因此在实际应用中应结合业务...

    深入理解LINUX内核(中文第三版)第四章 中断和异常

    在深入理解Linux内核第四章中,作者详细阐述了Linux内核中中断和异常的概念、分类、处理机制以及它们在系统运行中的重要性。本章不仅涉及了Intel微处理器手册中对中断和异常的分类方法,还探讨了Linux内核如何初始化...

    C# 捕获C/C++异常的例子

    总结来说,理解和处理C#与C++之间的异常转换是跨语言开发的关键技能。通过适当的设计和实现,我们可以确保C++的异常能够被C#有效地捕获和处理,从而增强程序的健壮性和稳定性。在实际项目中,确保正确处理各种异常...

    深入理解java异常(异常中的Error+异常中的Exception+检查异常+运行时异常+异常处理+throws关键字等)

    try 块中放置可能会发生异常的代码,当异常发生时,try 块抛出系统自动生成的异常对象,然后异常处理机制将负责搜寻参数与异常类型相匹配的第一个处理程序,并执行 catch 语句。 throws 关键字用于在方法签名中声明...

    理解.NET中的异常

    总的来说,理解.NET中的异常机制对于编写健壮、易于维护的代码至关重要。正确地使用异常,结合异常的本质和.NET提供的异常类,可以提高代码质量,同时确保在遇到错误时能够及时恢复或提供有用的错误信息。

    C#异常处理总结及简单实例

    一、异常处理的理解? 异常处理是指程序在运行过程中,发生错误会导致程序退出,这种错误,就叫做异常。 因此处理这种错误,就称为异常处理。 二、异常处理如何操作? C# 异常处理时建立在四个关键词之上的:try、...

    易语言HOOK异常处理

    源码分析可能还包括理解如何在异常发生时正确恢复,或者记录异常信息以供后续分析。 在实际应用中,这种技术可以用于创建安全的程序,提高软件的稳定性,或者在调试阶段深入理解程序行为。对于易语言的开发者来说,...

    深入理解java异常处理机制Java开发Java经验技巧共

    这篇19页的PDF文档《深入理解java异常处理机制Java开发Java经验技巧共》可能涵盖了Java异常处理的基本概念、最佳实践以及高级用法。在Java中,异常处理通过五个关键字来实现:try、catch、finally、throw和throws。 ...

    全面理解java中的异常处理机制

    Java中的异常处理机制是编程过程中不可或缺的一部分,它用于处理程序运行时出现的错误或不正常情况。...理解并熟练运用异常处理,不仅可以提高代码质量,还能帮助开发者更好地应对复杂编程环境中的各种挑战。

    易语言线程结构异常处理

    易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语句,降低了编程的门槛,使得更多的人能够参与到编程中来。...同时,深入理解线程管理、异常处理和底层内存操作也是提升编程技能的重要步骤。

    c/vc++/MFC异常处理/结构化异常处理 浅析

    在编程领域,异常处理是确保程序健壮性与稳定性的关键技术。对于C、C++以及基于MFC(Microsoft Foundation Classes)的开发来说,异常处理更是不...理解并熟练运用这些异常处理机制,是每个专业程序员必备的技能之一。

    JAVA范例 四)异常处理---编译时异常、运行时异常

    本文将深入探讨"JAVA范例 四)异常处理---编译时异常、运行时异常"这个主题,结合标签"源码"和"工具",我们可以理解这与实际编程实践和可能使用的开发工具如Struts2框架相关。 首先,我们来看编译时异常。编译时...

    计算布格异常Fortran程序

    首先,我们要理解什么是自由空气异常(Free Air Anomaly)。自由空气异常是指地球表面某点的重力值与理想平坦地球在同一高度上的重力值之差。它反映了地壳下方密度分布的差异,但并未考虑地形对重力的影响。计算公式...

    关于Java异常处理机制的深入理解.doc

    在实际编程中,理解Java异常处理机制的这些细节至关重要,因为它可以帮助我们编写更加健壮和易于维护的代码。合理的异常处理可以防止程序崩溃,提供有用的错误信息,并允许程序优雅地处理错误情况。

Global site tag (gtag.js) - Google Analytics