`
qingwengang
  • 浏览: 27566 次
  • 性别: 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  







相关推荐

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

    什么是异常?运行时发生的可被捕获和处理的错误。这篇文章主要介绍了Java EE项目中的异常处理总结,有需要的可以了解一下。

    论文研究-Java EE项目中的错误处理和异常处理方式的研究 .pdf

    Java EE项目中的错误处理和异常处理方式的研究,苗锡奎,张语涵,在传统的Java EE环境中,应用程序常通常是采用硬编码的方式来避免将要发生的错误和使用简单的try….catch语句进行简单的处理,这样不��

    全新JAVAEE大神完美就业实战课程 超150G巨制课程轻松实战JAVAEE课程 就业部分.txt

    day07_solr集群搭建_全局异常处理 day08_activeMQ介绍_搭建_解决同步索引库问题 day09_FreeMark入门_静态化页面标签介绍_静态化页面实现 day10_Nginx代理详解..单点登录系统工程搭建_接口文档讲解 day11_单点...

    JavaEE基础思维导图xmind软件

    String、StringBuilder、正则表达式、包装类、Object类、parseInt()、toString()和valueOf()的区别、File、二进制、RandomAccessFile、IO流、异常处理、多线程、集合

    javaee相关课件

    Java简介,语法基础,hibernatqi2,Strutsqi2,jsp,08多线程,07IO流技术,06GUI图形用户界面,05集合操作,03面向对象基础,04工具类和算法、异常处理,。。。。。。。

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    8.1.4 异常处理 247 8.2 Spring Data JPA 248 8.2.1 点睛Spring Data JPA 248 8.2.2 Spring Boot 的支持 258 8.2.3 实战 260 8.3 Spring Data REST 284 8.3.1 点睛Spring Data REST 284 8.3.2 Spring Boot 的支持 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    8.1.4 异常处理 247 8.2 Spring Data JPA 248 8.2.1 点睛Spring Data JPA 248 8.2.2 Spring Boot 的支持 258 8.2.3 实战 260 8.3 Spring Data REST 284 8.3.1 点睛Spring Data REST 284 8.3.2 Spring Boot 的支持 ...

    Java/JavaEE 学习笔记

    第五章 Handling Exceptions(异常的处理)243 第六章 Advanced Topics(高级主题)..........243 第七章 Custom Tags(自定义标记) .246 第八章 EL元素(Expression Language)......247 第九章 Java Server Page Tag ...

    MV模式-输入三条边,是否构成三角形,输出三角形的面积

    MV模式-输入三条边,是否构成三角形,输出三角形的面积。 这个是javaee的实验,可以学一学试一试,主是要学会应用javabean封装数据和业务逻辑。

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    8.1.4 异常处理 247 8.2 Spring Data JPA 248 8.2.1 点睛Spring Data JPA 248 8.2.2 Spring Boot 的支持 258 8.2.3 实战 260 8.3 Spring Data REST 284 8.3.1 点睛Spring Data REST 284 8.3.2 Spring Boot 的支持 ...

    java EE学习总结 第六周(包含思维导图)

    异常处理的必要性:任何程序都可能存在大量的未知问题、错误;如果不对这些问题进行正确的处理,则可能导致程序的中断,造成不必要的损失 异常的分类 Throwable:可抛出的,一切错误或异常的父类,位于java.lang包中...

    Java讲义(第2版)

    本书深入介绍了Java编程的相关方面,全书内容覆盖了Java的基本语法结构、Java的面向对象特征、Java集合框架体系、Java泛型、异常处理、JavaGUI编程、JDBC数据库编程、Java注释、Java的IO流体系、Java多线程编程、...

    高级Java软件架构师学习计划

    异常处理与事件响应 Java基础类库与中期项目实战 Java多线程编程、网络编程 项目实战 J2EE中级 数据库基础与linux操作系统 JDBC程序开发 JavaEE基础 JSP、SERVLET、JSTL 和 EL JavaBean/EJB MVC 设计模式与中期项目...

    基于XML的航空物流数据交换技术研究分析

    对于现代航空物流数据交换中所面临的问题,...研究不同关系模式的相互转换规则,实现设计航空物流数据交换模型的实验,通过实验结果表示,其能够实现XML格式业务数据的接收和发送,保存历史数据,对异常情况进行处理。

    JAVA软件工程师_Java入门视频教程

    [第65节] 1.8.3 使用try-catch-finally处理异常1 [第66节] 1.8.3 使用try-catch-finally处理异常2 [第67节] 1.8.4 多个catch语句的使用1 [第68节] 1.8.4 多个catch语句的使用2 [第69节] 1.8.5 throws关键字的使用1 ...

    Java技术面试课程,通过参与这门课程,学习者将能够系统地学习和巩固Java技术知识,并在面试中展现自己的技术能力和优势

    核心Java知识:涵盖Java语言的语法、面向对象编程、集合框架、异常处理等核心概念和特性。 Java开发工具和环境:介绍常用的Java开发工具,如Eclipse、IntelliJ IDEA等,以及Java运行时环境的配置和使用。 Java类库...

    JDiy框架 2.5.2.rar

    一款超轻量的java极速开发框架,javaEE/javaSE环境均适用。便捷的数据库CRUD操作API。支持各大主流数据库:MySQL, SQL Server(MsSQL),PostgreSQL、Oracle、DB2、SQLite。内置高效连接池,JDiyApp上下文环境动态加载...

    SpringBoot

    而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。 JavaEE开发的颠覆者:Spring Boot实战从Spring 基础、Spring MVC 基础讲起,从而无...

    2-J2EE核心技术

    JavaEE核心技术Java语言的基本语法 OOP思想——封装、继承和多态 异常处理 java.lang包、java.util包、java.io包 JDBC数据库访问技术 Swing编程 使用NetBeans进行程序开发

Global site tag (gtag.js) - Google Analytics