java - 异常浅谈
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 - 异常浅谈的更多相关文章
- 【推荐】JAVA基础◆浅谈3DES加密解密
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 【Java】浅谈Java IO
注意 本文的代码,为了学习方便,简化代码复杂度,未考虑拆包.粘包等情况的处理.所以仅供学习使用,不能用于实际环境. 阻塞IO,BIO Java1.1发布的IO是BIO.阻塞地连接之后,通过流进行同步阻 ...
- java集合浅谈(一)
一.类库结构图概览 容器对象仅能持有对象引用(对象的指针),而不是Copy对象信息,从网上搜得几张Java中集合类库的结构图,如下所示: 二.解说Collection 2.1 Collection ( ...
- java多线程浅谈
当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 分这几种情况: 1.其他方法前是否加了synchronized关键字,如果没加,则能. 2 ...
- Java:浅谈InputStream的close方法
原则:最好在任何时候使用InputStream或者OutputStream的时候,在finally中调用close()方法,显式关闭. 一个典型的示例 InputStream in = null; t ...
- 【JAVA】浅谈java内部类
一.什么是内部类? 到底什么是内部类呢?通俗的讲,就是在类内部定义的类,包括定义在一个类的方法外面.方法里面或者代码块中. 二.为什么要使用内部类? 为什么我们要不走寻常路,把一个类定义在另一个类的内 ...
- 【JAVA】浅谈java枚举类
一.什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二.为什么不用静态常量来替代枚举类呢? public static final int SEASO ...
- 通过Java代码浅谈HTTP协议
最近刚看了http协议,想写点东西加深一下理解,如果哪儿写错了,请指正. 1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(W ...
- java序列化浅谈
首先大家进来第一个疑问肯定是"什么是序列化?为什么要使用序列化?怎么实现一个简单的序列化案例?" 1.序列化就是把对象以一种规范的二进制形式存在内存中,另一边以反序列化方式获取: ...
随机推荐
- 【转】linux设备驱动之MMC SD卡——核心层简单分析
原文网址:http://blog.chinaunix.net/uid-28685940-id-3889878.html /*************************************** ...
- Design T-Shirt
Design T-Shirt Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HDOJ/HDU 1984 Mispelling4(删除第n个字符~)
Problem Description Misspelling is an art form that students seem to excel at. Write a program that ...
- ASP.NET MVC中混合WebForm
新建一个名为WebForms的文件夹用于存放WebForm页面文件. // 忽略对 WebForms 路径的路由routes.IgnoreRoute("WebForms/{weform}&q ...
- 项目杂记(MONTHS_BETWEEN,Having ,Spool)
1,oracle中计算年龄: select FLOOR(MONTHS_BETWEEN(SYSDATE, to_date('20130728', 'yyyymmdd')) / 12), trunc(mo ...
- C语言中的宏
写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等.下面列举一些成熟软件中常用得宏定义...... 1,防止一个头文件被重复包含 #ifndef COMDEF_ ...
- 报错:Cannot insert explicit value for identity column in table 't' when identity_insert is set to OFF
通常情况下,不能向 SQL Server 自增字段插入值,如果非要这么干的话,SQL Server 就会好不客气地给你个错误警告: Server: Msg 544, Level 16, State 1 ...
- getaccesstoken方法
通过appid和appsecret获取access_token的定义函数 这里用的是memcache缓存存储用户信息7000秒 <?php function getAccessToken($ap ...
- Day 3 @ RSA Conference Asia Pacific & Japan 2016 (morning)
09.00 – 09.45 hrs Tracks Cloud, Mobile, & IoT Security A New Security Paradigm for IoT (Inter ...
- svn 上传 过滤
代码上传过程中发现.so文件不能上传,查了一下,发现是svn服务器要设置上传过滤:很多文件,会被过滤掉,不能正常上传.设置如下: 通过终端打开配置文件: open ~/.subversion/conf ...