Java异常处理 lyncn 原创

0 程序运行中,用户输入错误,磁盘满了,打印机打印中缺纸等等都会引起错误!
错误的处理与语言提供的异常处理机制相关。java的异常处理是常见编程语言中最强大,最优雅的。
1 java中的异常对象都派生于Throwable类的一个实例。
Throwable包括两个分支Error和Exception。
Exception包括两个大类,IOException和RuntimeException。
java语言规范将派生于RuntimeException或Error的所有异常称之为未检查异常(unchecked exception),其他异常为(checked exception)
2 声明已检查异常
有些只有一个异常
比如java.util.TreeSet类(jdk1.5)中
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException {
// Write out any hidden stuff
s.defaultWriteObject();

// Write out Comparator
s.writeObject(m.comparator());

// Write out size
s.writeInt(m.size());

// Write out all elements in the proper order.
for (Iterator i=m.keySet().iterator(); i.hasNext(); )
s.writeObject(i.next());
}
如果有多个异常,中间用","分隔开来
比如java.util.TreeSet类(jdk1.5)中
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException {
// Read in any hidden stuff
s.defaultReadObject();

// Read in Comparator
Comparator<E> c = (Comparator<E>) s.readObject();

// Create backing TreeMap and keySet view
TreeMap<E,Object> tm;
if (c==null)
tm = new TreeMap<E,Object>();
else
tm = new TreeMap<E,Object>(c);
m = tm;
keySet = m.keySet();

// Read in size
int size = s.readInt();

tm.readTreeSet(size, s, PRESENT);
}
3 创建自己的异常类
public class MyAppException extends Exception {
public MyAppException() {
super();
}

public MyAppException(String message) {
super(message);
}

public MyAppException(String message, Throwable cause) {
super(message, cause);
}

public MyAppException(Throwable cause) {
super(cause);
}
}
4 抛出异常
if(getProjectCount(projectId,conn) < 0){
throw MyAppException("没有编号为"+projectId+"的工程");
}
5 捕获异常
捕获一个异常
try{
do sth;
}
catch (Exception e){
handler for e;
}
捕获多个异常
try{
do sth;
}
catch (PatternSyntaxException pse){
handler for pse;
}
catch (NullPointerException npe){
handler for npe;
}
catch (Exception e){
handler for e;
}
描述更普遍的错误应该在后面
6 再次抛出
try{
do sth;
}
catch (Exception e){
throw MyAppException("没有编号为"+projectId+"的工程",e);
}
可以保存异常的原因,必要的时候可以把已检查异常封装为运行时异常。
7 finally子句
finally不管是否有异常都会执行,是回收资源的最好方法。
Graphics g = image.getGraphics();
try{
//1
code that might throw exception;
//2
}
catch (Exception e){
//3
show e;
//4
}
finally {
//5
g.dispose();
}
//6
情况一:代码没有抛出异常,将执行,1,2,5,6
情况二:抛出一个catch子句的异常并且catch子句没有出现异常,执行 1,3,4,5,6
情况三:抛出一个catch子句的异常并且catch子句出现异常,执行 1,3,5
情况四:抛出异常没有被catch捕获,执行1,5
需要注意的是finally中的句子不应该出现错误,当出现错误后将使原始异常丢失!!!
发布了0 篇原创文章 · 获赞 0 · 访问量 722
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览