版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33127597/article/details/83147442
在编写代码时,要重视异常,不可忽视异常,也不要遮掩异常,对返回的异常信息要全部返回
重视异常
当产生异常的时候不去捕获,会发生什么?
在执行代码时,代码发生异常没去捕获,线程就会停止。而异常信息没有返回的话,
连出错的地方都很难找。
在JAVA中,发生异常后,主要是:
1.捕获并处理,防止进一步转播。
2.捕获在抛出它,给调用端去处理。
3.不捕获这个异常,随他怎么去传播。
举例
例如:捕获了异常,而没有去处理,将异常吞噬了,这样很可怕
public void m1(){
try {
}catch (Exception e){
}
}
这样捕获了异常,没有区处理,这样代码会继续执行,和没有发生异常一样,代码将异常吞噬了。
刚开始不知道如何去处理异常,只要应该将异常存储到日志文件中,
public void m1(){
try {
}catch (Exception e){
System.out.println(e);
LogException(e);
}
}
这样做只能将测试的异常存储,无法记录未发生的异常。如果想要发现测试过程中未发生的异常,就需要去
查找整个程序源码,在打印System.out.println语句应该替换为异常处理代码。
用printStackTrace可以将异常打印在控制台
public void m1(){
try {
}catch (Exception e){
System.out.println(e);
e.printStackTrace(System.err);
}
}
最好的办法就是去处理异常
不要遮掩异常
在处理先前异常时,如果catch和finally都抛出异常了,finally就会将catch的异常遮掩,只会剩下最后一个异常传给调用端。
如果你想知道函数失败的罪魁祸首,最好不要遮掩异常。
- 示例
public class Hidden {
public static void main(String[] args) {
Hidden hidden = new Hidden();
try {
hidden.foo();
}catch (Exception e){
System.out.println("In main:" + e.getMessage());
}
}
public void foo() throws Exception{
try {
throw new Exception("first Exception"); //1
}catch (Exception e){
throw new Exception("Second Exception"); //2
}finally {
throw new Exception("Third Exception"); //3
}
}
}
最后只会输出 In main:Third Exception
因为2将1的异常遮掩了,3将2的异常遮掩了,最后只返回3的异常给调用端。
其他异常都被丢弃了。
修改下代码
public static void main(String[] args) {
Hidden hidden = new Hidden();
try {
hidden.foo();
} catch (Exceptions e) {
System.out.println("In main:" + e.getException());
}
}
public void foo() throws Exceptions {
Vector vector = new Vector(2);
try {
int i = 2 / 0;
} catch (ArithmeticException e){
vector.add(e);
try {
int j = Integer.parseInt("e");
}catch (NumberFormatException ee) {
vector.add(ee);
}
} finally {
if(vector.size()!=0){
throw new Exceptions(vector);
}
}
}
public class Exceptions extends Exception {
private Vector vector;
public Exceptions(Vector vector) {
this.vector = vector;
}
public Vector getException(){
return vector;
}
}
将可能发生的异常放入一个list中,最后再将多个异常返回去。这个只是个举例,例子有点俗。
- 不积跬步,无以至千里 每天一点点。