代码原型如下
class Myexception extends Exception {
public Myexception() {
super();
}
}class a {
public void logic() {
try {
for (int i = 0; i < 10; i++) {
if (i > 5) {
throw new Myexception();
}
}
} catch (Myexception e) {
System.out.println("弹出对话框");
} }
}class b {
public void logic() {
for (int i = 0; i < 10; i++) {
if (i > 5) {
System.out.println("弹出对话框");
}
}
}
}public class test {
public static void main(String[] args) {
a a = new a();
a.logic();
b b = new b();
b.logic();
}
}
上面的for循环只是为了说明问题,不是真的逻辑.
b类和a类的效果是一样的.
看到项目里疯狂的使用自定义异常,有什么现实意义吗.难道是为了让代码看起来酷一点?
class Myexception extends Exception {
public Myexception() {
super();
}
}class a {
public void logic() {
try {
for (int i = 0; i < 10; i++) {
if (i > 5) {
throw new Myexception();
}
}
} catch (Myexception e) {
System.out.println("弹出对话框");
} }
}class b {
public void logic() {
for (int i = 0; i < 10; i++) {
if (i > 5) {
System.out.println("弹出对话框");
}
}
}
}public class test {
public static void main(String[] args) {
a a = new a();
a.logic();
b b = new b();
b.logic();
}
}
上面的for循环只是为了说明问题,不是真的逻辑.
b类和a类的效果是一样的.
看到项目里疯狂的使用自定义异常,有什么现实意义吗.难道是为了让代码看起来酷一点?
如 IOException 和NullPointException
虽然都是Exception。。
class MyException extends Exception {
private final static long serialVersionUID = 123456789l;
private String errorCode;
private String errorMessage; public MyException() {
super();
} public MyException(String s) {
super(s);
} public MyException(String errorCode, String errorMessage) {
this.errorCode = errorCode;
this.errorMessage = errorMessage;
} public String getErrorCode() {
return errorCode;
} public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
} public String getErrorMessage() {
return errorMessage;
} public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}}
//包装已检查异常或运行时异常
try {
try {
//do somethings
} catch (IOException e) {
MyException me= new MyException("10001","io error");
se.initCause(e);
throw me;
}
} catch (MyException e) {
String errorCode=e.getErrorCode();
String errorMessage =e.getErrorMessage();
}
都有自己的设计原则,大思想一致,但细小的差别还是存在的1.异常类的名称讲究见名知义,举个例子
FileNotFoundException是IOException的子类,为什么要设计FileNotFoundException呢,
我觉得有两个原因:
a.文件未找到的情况较常发生
b.为见名知义,程序可以更好的判断if instanceof FileNotFoundException2.一般一个库,或一个系统都会设计一个根异常,然后根据需要添加子异常另外提一个,c#中的异常对应到java都是RuntimeException,有时候会忘记catch,导致程序莫名down掉