java该怎么样处理异常

问题描述

在网上查了好多关于异常处理的例子,也看了不少关于异常处理规范,但是还是不怎么清楚java异常处理到底怎么做才算好.希望高手给个详细的例子说明 异常 在实际 开发中该怎么处理1:说什么时候我们应该把异常重新抛出,为什么要重新抛出2:发生异常后,除了释放资源,日志记录操作后,我们怎么样来给用户或客户出示一个清晰的提示

解决方案

一、发生异常时,应该给用户一个明确的提示,告诉用户错误原因,应该如何操作。从用户角度考虑,我把异常分为以下几种:1、用户异常: 相当于业务异常,如用户输入密码错误,则throw new BussinessException("密码输入错误,请重试");2、代码异常:如程序员疏忽,导致代码抛出NullException。这类异常对于用户来说,没办法作出回应。用户只能找管理员解决这个问题。所以这类异常可以定义为:"您的操作服务器无法响应,请联系管理员";3、其他的可以为外界环境导致的异常,如数据库无法连接等,这类异常对于用户来说一样没办法。二、异常框架的搭建提以下几点:1、捕获底层异常,转为自定义的异常。如SQLException,由DAO捕获,并且抛出DaoException。这里的SQLException为底层异常2、自定义异常一般继承RuntimeException,这样无需再接口上声明。3、出现底层异常立即捕获,自定义异常让后台最上层代码处理。如web应用可以由action的基类或者filter统一处理异常,抛给用户。4、业务异常可以命名的更有意义,如UserNotFoundException。我比较偷懒,一般直接抛出BussinessException
解决方案二:
ls的两位已经回答了很多了,还有就是可以用异常处理框架,像struts就可以将所有异常交给它来处理,设计模式中chain of responsibility可以很好用在异常处理上。还有就是如果系统配置了事务,那异常一定要抛出,否则事务就不起作用了。
解决方案三:
异常处理应该是一个系统设计问题, 取决于你想怎么让系统报出这个异常. J2EE企业系统中你可以根据你设计的异常类型来返回不同的提示到UI界面给用户.重新抛出是在你的设计中不该由这个类处理这个异常, 就重新抛出给更高层处理
解决方案四:
这个没什么官方标准,用多了影响性能。我一般这样处理异常运行时错误导致的异常{ 警告用户:系统某模块不能正常工作时,中断用户操作并显示错误信息; 只记录日志:不影响或改变业务流程,不影响用户角色的操作;}可预测的异常{ 结束业务逻辑:当异常导致用户操作不可进行,改变流程; 重试提交:如果由于用户非法操作产生的异常,允许用户再试一次。}例子就没有了,场景太多。

时间: 2024-08-02 19:07:09

java该怎么样处理异常的相关文章

java.lang.IllegalArgumentException 错误异常求解

问题描述 java.lang.IllegalArgumentException 错误异常求解 上面是代码的日志 求大神指点 解决方案 有一个方法传参或者是什么,参数类型错了 看看提示在哪一行 解决方案二: 解决spring的java.lang.IllegalArgumentException异常.hibernate中java.lang.IllegalArgumentException异常可能的原因

线程-新人求助关于java.lang.StackOverflowError的异常问题

问题描述 新人求助关于java.lang.StackOverflowError的异常问题 public class ProcessRow { Properties source= new Properties(); { try { FileInputStream fis = new FileInputStream(new File( inputPropertieName())); InputStreamReader isr = new InputStreamReader(fis, "UTF-8&

Java 中常见的异常和自定义异常

常见异常:  java.lang.nullpointerexception    这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等.对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了.数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化

java多线程执行出现异常怎么办?

问题描述 java多线程执行出现异常怎么办? 使用spring+ibatis框架开发: 现在网站的下单流程分为三步,1.发送邮件和短信:2.删除购物车表:3.插入订单表: 现在用线程池来实现多线程的并发操作.但是如果其中一个线程出现异常,想的是应该全 部都回滚.那么如果来保证这三个线程之间的原子性. 解决方案 首先,必须使用互斥锁将你的操作在锁保护范围内:其次了,就是使用try-catch-finally进行异常捕获,一旦捕获异常就执行回滚操作 .最后,只要保证同一时刻只有一个线程执行相应的操作

数据库连接-为什么在MyEclips下运行链接数据库的java程序会报异常,但在dos下可以。

问题描述 为什么在MyEclips下运行链接数据库的java程序会报异常,但在dos下可以. import java.sql.*; public class Connect { /** * @param args */ public void getConnection() { String driverName = ""com.microsoft.sqlserver.jdbc.SQLServerDriver""; Connection dbConn=null; t

java集合返回值异常。

问题描述 java集合返回值异常. 求大神指点为什么这个函数返回值是这样子的? model.OverallEnergyChart是一个包名加类名,这个是一个javabean类,为什么打印al里的值返回值是那样子的? 解决方案 楼上说的对,你控制台输出的是toString()方法的结果.你重写,就可以输出自己想要的了 解决方案二: JAVA返回值与异常Java异常时的返回值(java 基础知识) java异常抛出和返回值 解决方案三: 重写toSting()方法就可以了. 解决方案四: 控制台显示

java.sql.SQLException: Io 异常: 连接超时

问题描述 帮我看看咋回事啊?我搞不懂.就是运行很久的一个项目,最近突然就动不动就登陆不了,然后连首页都显示不出来了.然后只能重启服务,就又没问题了.老师需要重启.帮我看看日志全是这个,是什么意思啊?ERROR 2013-12-06 13:12:20,831 org.logicalcobwebs.proxool.GAP-Pool #0041 encountered errors during destruction: java.sql.SQLException: Io 异常: 连接超时at ora

使用JUnit来测试Java代码中的异常

使用JUnit来测试Java代码中的异常有很多种方式,你知道几种? 给定这样一个class. Person.java public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; }

阿里巴巴 Java 开发手册之异常日志(二)-------我的经验

二.异常日志 (一) 异常处理 1. [强制]Java 类库中定义的一类RuntimeException可以通过预先检查进行规避,而不应该通过catch 来处理,比如:IndexOutOfBoundsException,NullPointerException等等. 说明:无法通过预检查的异常除外,如在解析一个外部传来的字符串形式数字时,通过catch NumberFormatException来实现. 正例:if (obj != null) {...} 反例:try { obj.method(

Java内存溢出(OOM)异常完全指南

我的职业生涯中见过数以千计的内存溢出异常均与下文中的8种情况相关.本文分析什么情况会导致这些异常出现,提供示例代码的同时为您提供解决指南. 这也许是目前最为完整的Java OOM异常的解决指南. 1.java.lang.OutOfMemoryError:Java heap space Java应用程序在启动时会指定所需要的内存大小,它被分割成两个不同的区域:Heap space(堆空间)和Permgen(永久代): JVM内存模型示意图 这两个区域的大小可以在JVM(Java虚拟机)启动时通过参