java提供异常处理机制中,可以分为RuntimeException和checked Exception两种.

RuntimeException

  是运行时异常,是程序本身无法解决的.例如,对于一个用户注册网站,如果当前用户名已经被使用,则解决方案只能是当前用户使用新的用户名, 而程序本身是无法解决的(我们总不能通过程序将原有用户名删除,不给他使用,然后给当前用户注册吧...). 也可以说,是由调用者决定的.

  企业开发中,一般自定义(给用户反馈信息)的异常偏向于使用RuntimeException,这是因为,方法的调用者不需要进行处理(如果有只能继续往上抛),也最好不要处理.也就是很多人说的,不要去捕获RuntimeException.

checked Exception

  例如java.io.UnsupportedEncodingException,一般是程序指定不恰当的编码而造成的,这完全是要程序去解决的,丢给用户也没有用.

另外,提一下我总结的处理异常的方式:

  java本身提供给我们的两种方式,其实正和我们的需要:1)要么往方法外抛出; 2)要么使用try catch, 然后看业务需要进行处理.下面说第一种情况:

  例如,我们要定义一个方法,进行除非操作.我们可以自定义一个RuntimeException,

/**
*数字不合理的异常类.
*/
class NumberInvalidException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = 1L; public NumberInvalidException(String msg) {
super(msg);
}
}

然后我们定义一个方法(我们假设对于除数为零的操作不进行处理),则可将方法定义为诸如:

	/**在非顶层调用中,一般可以将异常全部抛出.
* @param a
* @param b
* @return
*/
static int divide(int a, int b) {
if(b == 0)
throw new NumberInvalidException("除数不能为:" + b);
return a / b;
}

这样我们的方法就不会除数为零的运算进行处理.直接抛出给调用者.

  对于第二种情况,也就是使用try catch进行处理,不过这要看业务逻辑的需要才行(例如,对于调用者有时传递空值,我们可能要对某个变量赋默认值).不过,一般来说,非顶层的方法,都是可以网上抛出异常,要看业务需求,不能随意try catch(try catch顾名思义就是处理, 除非你真的懂怎么处理, 否则一般都要往方法外抛).

  就像做一个项目一样, 做的一个方法可能要别很多人调用,而要怎么处理,很多时候要看调用者的实际需要.我总结的一个处理异常的方式:除非你知道怎么处理,要么就抛出异常.

  一般的做法是,在非顶层方法,都抛出异常,然后在顶层调用者使用 try catch, 然后将 异常的 Message反馈给客户.

java - 异常浅谈的更多相关文章

  1. 【推荐】JAVA基础◆浅谈3DES加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  2. 【Java】浅谈Java IO

    注意 本文的代码,为了学习方便,简化代码复杂度,未考虑拆包.粘包等情况的处理.所以仅供学习使用,不能用于实际环境. 阻塞IO,BIO Java1.1发布的IO是BIO.阻塞地连接之后,通过流进行同步阻 ...

  3. java集合浅谈(一)

    一.类库结构图概览 容器对象仅能持有对象引用(对象的指针),而不是Copy对象信息,从网上搜得几张Java中集合类库的结构图,如下所示: 二.解说Collection 2.1 Collection ( ...

  4. java多线程浅谈

    当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 分这几种情况:    1.其他方法前是否加了synchronized关键字,如果没加,则能.    2 ...

  5. Java:浅谈InputStream的close方法

    原则:最好在任何时候使用InputStream或者OutputStream的时候,在finally中调用close()方法,显式关闭. 一个典型的示例 InputStream in = null; t ...

  6. 【JAVA】浅谈java内部类

    一.什么是内部类? 到底什么是内部类呢?通俗的讲,就是在类内部定义的类,包括定义在一个类的方法外面.方法里面或者代码块中. 二.为什么要使用内部类? 为什么我们要不走寻常路,把一个类定义在另一个类的内 ...

  7. 【JAVA】浅谈java枚举类

    一.什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二.为什么不用静态常量来替代枚举类呢? public static final int SEASO ...

  8. 通过Java代码浅谈HTTP协议

    最近刚看了http协议,想写点东西加深一下理解,如果哪儿写错了,请指正. 1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(W ...

  9. java序列化浅谈

    首先大家进来第一个疑问肯定是"什么是序列化?为什么要使用序列化?怎么实现一个简单的序列化案例?" 1.序列化就是把对象以一种规范的二进制形式存在内存中,另一边以反序列化方式获取: ...

随机推荐

  1. Windows Azure案例分析: 选择虚拟机或云服务?

    作者 王枫 发布于2013年6月27日 随着云计算技术和市场的日渐成熟,企业在考虑IT管理和运维时的选择也更加多样化,应用也从传统部署方式,发展为私有云.公有云.和混合云等部署方式.作为微软核心的公有 ...

  2. AjaxPro使用说明

    转自:http://www.cnblogs.com/lexus/archive/2007/11/29/977281.html 目录 AjaxPro使用说明    1 目录    2 修改历史纪录    ...

  3. java常用重构优化总结--自己亲身体验

    代码重构  6大原则:    单一职责原则(一个类最好最好只有一种行为动机,太多承担职责会导致耦合度太高).    开放封闭原则(功能可以扩展,但是不可以内部修改).    依赖倒转原则(应该依赖抽象 ...

  4. Ubuntu 下安装Kibana和logstash

    原文地址:http://www.cnblogs.com/saintaxl/p/3946667.html 简单来讲他具体的工作流程就是 logstash agent 监控并过滤日志,将过滤后的日志内容发 ...

  5. Bzoj 1042: [HAOI2008]硬币购物 容斥原理,动态规划,背包dp

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1747  Solved: 1015[Submit][Stat ...

  6. maven构建带版本号和日期的war包名

    21166312 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !import ...

  7. 打开U盘里是U盘的快捷方式?(2013.12.05)

    昨天去打印室打印,结果U盘就中招了 症状:   我的U盘:                                                            打开变成了里面:   ...

  8. 安装Office时出现windows installer服务不能更新一个或多个受保护的windows文件错误的解决方法

    今天在Windows XP上安装Microsoft Office 2010时,总是遇到“Windows Installer服务不能更新一个或多个受保护的windows文件,安装失败,正在回滚更改”提示 ...

  9. 腾讯sdk配置

    android-mirror.bugly.qq.com

  10. 批处理(.bat)中使用相对路径

    批处理中使用相对路径,只需要用cd /d %~dp0代替绝对路径就可以了. ->cd /d ->%~dp0 %0为当前批处理文件 %~d0 是指批处理所在的盘符 %~dp0 是指批处理所在 ...