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.序列化就是把对象以一种规范的二进制形式存在内存中,另一边以反序列化方式获取: ...
随机推荐
- efront二次开发记要
efront系统是一套开源的在线学习系统,是用PHP编写的,内含“考试”功能.该系统的开源的是社区版,虽然看上去功能强大,但使用起来却很不符合国情.为了让公司使用,先做了一次最简化的二次开发,由于是最 ...
- Android-adb shell 读取手机系统文件
1.首先保证手机是root 状态 2.运行 adb shell 页面以后 su root 3.ls 就会发现目录结构可以显示了
- Legal or Not
Legal or Not Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total ...
- Bzoj 2789: [Poi2012]Letters 树状数组,逆序对
2789: [Poi2012]Letters Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 278 Solved: 185[Submit][Stat ...
- win8下在microsoft visual studio 2012利用ODP.NET连接ORACLE 12c
老板要求我搭个ASP.NET框架,并且连接上ORACLE数据库,听起来好像挺简单的,但就是连第一步连接ORACLE我都搞了两天╮(╯▽╰)╭ 首先,项目书上要求用ORACLE 10G,可我自己的本本装 ...
- hdoj 5137 How Many Maos Does the Guanxi Worth【最短路枚举+删边】
How Many Maos Does the Guanxi Worth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/5 ...
- tomcat部署web项目的方式 转
JavaWeb开发Tomcat中三种部署项目的方法,开始Java web开发必不可少的步骤,经过查找,觉得有篇文章介绍的不错 1.在conf目录中新建Catalina\localhost目录,在该目录 ...
- 异常-JAVA
#异常 ##1.异常处理概述 1.异常时程序在执行过程中所产生的问题.导致异常的原因的有很多种,包括: 1. 用户输入了无效数据 2. 找不到一个需要打开的文件 3. 在通讯过程中 ...
- jetty服务器
1,http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin 2,http://wiki.eclipse.org/Jetty#Getting_S ...
- 从零开始学android开发-创建第一个android项目
打开ADT开发工具