`
qingwengang
  • 浏览: 29087 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

javaEE异常处理

阅读更多
1.java采用的是统一的异常处理机制,Exception是所以异常类的基类,所有的异常类都扩展于Exception类,如果想要定义一个新的异常类型,就应扩展一个新的Exception类。异常处理采用try,catch,finall,throw,thows五个关键字,其中try,catch,finall组合成try...catch...finally结构,其中try放在可能出现异常的地方,catch用来捕获异常,finally主要用来释放程序未释放的资源。不论try内的异常出现与否,finally里面的代码都会被执行。当一个函数中要出现异常时,可以用try..catch..finally结构来处理异常,也可以向上一层继续抛出异常。
2.所有继承于java.lang.Exception的异常类属于checked异常,所有继承于java.lang.RuntimeException的异常类型属于unchecked异常。程序中出现checked异常时,必须用try..catch..finally结构来处理异常,而RuntimeException属于运行时异常,unchecked异常表示用户无法恢复的异常,所以程序中的unchecked异常无需用try..catch..finally处理或向上抛出。
3.一般情况下,我们不需要创建新的异常类,而是使用现存的异常类。但我们也会创建新的异常类,在创建异常类时,我们应考虑异常的嵌套问题。
public void methodA throws ExceptionA(){
...
throw new ExceptionA();
}
public void methodB throws ExceptionB(){
...
throw new ExceptionB();
}

注意,当在methodB中调用methodA时,必须考虑处理可能抛出的ExceptionA,有两种做法,第一种是在methodB声明中声明抛出ExceptionA,这样会改变methodB的方法签名,而且一旦methodA的抛出异常机制一旦改变,则所有的调用methodA的方法都要改变。还有另一种处理方法,就是在定义异常类的时候在异常类中添加一个私有属性来记录异常起因,并且定义相应的构造方法。
public class ExceptionB extends Exception{
private Throwable cause;
public ExceptionBThrowable cause,String message){
super(message);
this.cause=cause;
}
public ExceptionB(String message){
super(message);
}
public ExceptionB(Throwable cause){
this.cause=cause;
}

当然,如果是这样的话,那么在使用printStackTrace()方法打印异常信息时,也要将起因异常的异常信息打印出来,这时我们就必须复写printStackTrace方法。如下:
public void printStackTrace(PrintStream ps){
if(cause==null){
printStackTrace(ps);
}else{
printStackTrace(ps);
printStackTrace(cause);
}
}

完整的异常类声明代码如下:
public NestedException extends Exception{
private Throwable cause;
public NestedException(Throwable cause,String message){
this.cause=cause;
super(message);
}
public NestedException(String message){
super(message);
}
public Throwable getCause(){
return (cause==null)?this:this.cause;
}
public String getMessage(){
String message=super.getMessage();
Throwable cause=this.getCause();
if(cause!=null){
message=message+",Nested message is"+cause;
}
return message;
}
public void printStackTrace(PrintStream ps){
if(ps==null){
super.printStackTrace(ps);
}else{
ps.println(this);
getCause().printStackTrace(ps);
}
}
public void printStackTrace(PrintWrite pw){   
if(getCause() == null){   
super.printStackTrace(pw);   
}   
else{   
pw.println(this);   
getCause().printStackTrace(pw);   
}   
}   
public void printStackTrace(){   
printStackTrace(System.error);   
}  
}

设计unchecked异常与上面一样,但要将extends Exception改为extends RuntimeException。
4.系统出现的异常可以记录在日志系统中。
public String getPassword(String userId)throws NoSuchUserException{   
UserInfo user = userDao.queryUserById(userId);   
If(user == null){   
Logger.info(“找不到该用户信息,userId=”+userId);   
throw new NoSuchUserException(“找不到该用户信息,userId=”+userId);   
}   
else{   
return user.getPassword();   
}   
}   
    
public void sendUserPassword(String userId)throws Exception {   
UserInfo user = null;   
try{   
user = getPassword(userId);   
sendMail();    
}catch(NoSuchUserException ex)(   
logger.error(“找不到该用户信息:”+userId+ex);   
throw new Exception(ex);   
} 

如果捕获到一个异常,但是这个异常是可以处理的。则无需要记录异常。捕获到一个未记录过的异常或外部系统异常时,应该记录异常的详细信息
try{
...
String sql="select * from user";
Statement stmt=conn.createStatement();
...
}catch(SQLException e){
Logger.error("sql执行错误"+sql+e);
}

5.javaee一般分为3层:表现层,业务层,集成层。
在分布式应用中,一般会遇到很多checked异常,而checked异常对系统是非常严重的,几乎没用重试的可能,因此必须写大量的try...catch代码来处理它们。为避免checked异常对系统造成很大的侵入性,我们可以针对SQLException等checked异常,定义新的unchecked异常将checked异常的异常信息封装起来再抛出。例如:
public DataAccessException extends RuntimeException{
....
}
public interface UserDao{   
public String getPassword(String userId)throws DataAccessException;   
}
public UserDaoImp implements UserDao{
public String getPassword(String userId)throws DataAccessException{
...
String sql=...;
try{
...
s.executeQuery(sql);
...
}catch(SQLException e){
throw new DataAccessException("访问数据库异常:"+sql,e);
}
}
}
分享到:
评论
2 楼 zcl198715 2010-01-01  
代码看得头痛!
能把代码的排版搞整齐些吗?
1 楼 duben 2009-12-01  







相关推荐

    JavaEE应用遇到的异常及解决方案

    在JavaEE应用开发中,异常处理是不可或缺的一部分。异常(Exception)是程序运行时出现的错误情况,它们中断了正常代码流程,需要开发者进行适当的处理。这篇博客文章"JavaEE应用遇到的异常及解决方案"可能涵盖了...

    Java EE项目中的异常处理总结(一篇不得不看的文章)

    Java EE项目中的异常处理是构建健壮应用程序的关键部分,它涉及到如何优雅地处理运行时错误,提供有意义的反馈,以及确保系统资源得到妥善管理。在Java编程中,异常是程序执行过程中遇到的不可预期情况,通常由错误...

    JavaEE项目案例源码

    7. **异常处理**:在处理用户请求时,可能会遇到各种异常情况,如数据验证错误、数据库连接失败等。良好的异常处理机制可以确保程序的健壮性,提供友好的错误提示给用户。 8. **安全性**:在线订购系统需要考虑用户...

    accp笔试试题笔试试题

    2. JavaEE异常处理:在JavaEE中,重写doGet()和doPost()方法时,可以处理ServletException和IOException。这两个异常是Servlet处理请求时可能出现的常见异常,ServletException通常表示Servlet执行过程中遇到的问题...

    JavaEE7 API 文档

    6. **JAX-RS 2.0**:Java API for RESTful Web Services(JAX-RS)用于构建RESTful服务,2.0版本添加了链接处理(Linking),支持HTTP方法扩展,以及统一异常处理。 7. **JMS 2.0**:Java Message Service(JMS)是...

    javaee.src.zip

    3. **异常处理**:JavaEE组件通常有严谨的异常处理机制,学习这部分可以帮助我们编写健壮的代码。 4. **性能优化**:源码中可能包含了各种性能优化技巧,如缓存策略、并发处理等,这些都是开发高效应用的关键。 5....

    javaEE快速入门,实现注册登陆源码

    5. **异常处理**:在处理用户输入和数据库操作时,必须考虑到可能出现的异常,如SQL注入、空指针异常等,并提供适当的错误处理和反馈。 6. **前端展示**:虽然这里没有提供具体的HTML和CSS文件,但通常我们需要创建...

    从java走向javaEE

    此外,理解异常处理、集合框架、I/O流、多线程、网络编程等也是必不可少的。 JavaEE则在此基础上增加了对服务器端功能的支持,如Servlet、JSP(JavaServer Pages)、JDBC(Java Database Connectivity)用于数据库...

    《从Java走向JavaEE》 PDF

    它还提供了异常处理、垃圾回收机制、自动内存管理等特性,使得开发者能够更加专注于业务逻辑,而不是底层的系统管理。此外,Java的标准化和开源性也是其广受欢迎的原因之一。 JavaEE平台则在此基础上扩展了更多用于...

    mldn的注册验证javaee

    合理的异常处理机制能确保程序的健壮性,提供友好的错误信息反馈给用户。 9. **Session管理**:注册成功后,用户可能需要登录。session是JavaEE中一种管理用户会话状态的方式,可以用来跟踪已登录的用户,防止重复...

    基于JAVAEE的学生管理系统

    在实际开发过程中,还需要考虑权限控制、异常处理、性能优化、安全防护等多方面因素,以确保系统的稳定、高效和安全。对于开发者来说,熟悉JAVAEE规范、精通Oracle数据库操作以及具备良好的软件工程实践是必不可少的...

    JAVAEE云盘管理系统

    9. **异常处理**:为提高程序健壮性,需要设置全局异常处理器,捕获并适当地处理可能出现的运行时异常。 10. **测试**:单元测试和集成测试是必不可少的,可以使用JUnit、Mockito等工具对各个模块进行验证,确保...

    JavaEE需牢记的模板类

    5. **异常处理模板**:为统一异常处理,可以创建一个异常处理器模板,定义捕获、记录和响应异常的一般流程,然后根据不同的业务场景,通过继承或策略设计模式来处理特定类型的异常。 在实际项目中,模板类可以结合...

    JavaEE+项目案例+(代码+数据库)

    - **调试与优化**:通过阅读代码,了解异常处理和性能优化的方法。 通过这个项目案例,学习者不仅可以掌握JavaEE的基本技术,还能了解企业级项目的开发流程,包括需求分析、设计、编码、测试和维护。同时,通过...

    javaEE人员管理系统

    《JavaEE人员管理系统...在实际开发过程中,开发者还需要考虑权限控制、异常处理、日志记录等方面,以提升系统的安全性和可扩展性。这样的系统设计不仅能满足当前的需求,也为未来的功能升级和维护打下了坚实的基础。

    JavaEE实验报告.zip

    9. **异常处理**:Struts2提供了全局的异常处理机制,通过配置`<global-exception-mappings>`或`<global-results>`,可以捕获和处理Action执行过程中抛出的异常,返回相应的错误页面或提示信息。 10. **最佳实践**...

    JavaEE5_API

    2. **统一的异常处理**:JSR 316引入了统一的异常模型,使得应用程序可以更有效地处理异常,避免了大量try-catch块的使用。 3. **JavaServer Faces(JSF)1.2**:作为MVC框架,JSF1.2提供了用于构建用户界面的组件...

    Javaee MVC 网上书店毕业论文+程序

    5. **文档**:该项目提供的详细文档可能包括需求分析、系统设计、数据库设计、实现过程、功能模块介绍、异常处理等内容,有助于理解系统的整体架构和工作流程,对于学习者而言,是理解和复现系统的重要参考资料。...

    课后习题答案_javaee基础编程课后习题答案_

    了解连接池的概念,以及如何处理异常和事务管理,对于数据库操作至关重要。 4. **MVC(Model-View-Controller)**:设计模式,常用于Web开发,将业务逻辑、用户界面和数据访问分离开来。Spring MVC是JavaEE中实现...

    javaEE大作业-登录系统

    7. **异常处理**:良好的错误处理是系统稳定性的关键。在处理用户输入和数据库操作时,需要捕获并处理可能出现的异常,如空指针异常、SQL异常等。 8. **安全性**:考虑到这是一个登录系统,安全方面尤其重要。包括...

Global site tag (gtag.js) - Google Analytics