By U___0:
浅谈一下自己对java异常机制的理解:
异常存在的意义在于更好的修复bug,找出错误点。另外,在即便出了bug也能按照我们想要的方式继续程序(比如完成某些操作,或者直接退出之类的)
在具体的某个方法中,我们可以利用throw关键字,在完成某种异常的判定(例如:if(除数==0)throw new 一个除零异常)下抛出某个已经被定义的异常。
这里我们先自定义一个异常
//这个自定义异常没有做什么工作,
//只是提供了一个printMessage方法输出一些信息
//by U__0
public class MyException extends Exception{
private String str=null;
public MyException(){
this.str = "Something wrong!";
}
public void printMessage(){
System.out.println(str);
}
}
在特定方法中我们可以调用 throws new MyException()来抛出这个异常
然而异常不是抛出就可以不管了,
而对于异常,据我所了解的有两种处理方式
一:就地解决,不留痕迹 而这也就是常说的try {} catch(Exception e){}语句
这里我们举一个除零错误的例子
很明显这里fun计算x/y并返回垓值,
public int fun(int x,int y){
if (y==0){//除数为零时我们我们抛出异常
try {
throw new MyException();
} catch (MyException e) {
// TODO Auto-generated catch block
e.printStackTrace();//这里我们可以换成该异常的其他任意方法,例如此处我们可以换成e.printMessage();这里也就是我们对异常的处理操作
}
}
return x/y;
}
二:声明这个方法throws某些异常,这些异常都是该方法内可能抛出的未处理的异常
也就是说,在该方法内我们可以不去处理这个异常,默认调用这个方法的地方一定会处理该异常,
我们形象一点说,我下面有人帮我办事,而我也在为别人办事,下面的人办的事可能出了岔子,我可以说有的事情自己可以直接摆平(try{}catch(SomeException){}),但有些是我不知道上面的人想怎样解决,索性我就不管,我说我这里可能出某些岔子,哥们你托我办的事你自己盯着点(throws SomeException)。
那么按照这种理念我们重写一下该方法
public int fun(int x,int y) throws MyException{ //这里我们throws 的异常可能是我们调用的子方法抛出的异常,也可能是我们判定某些条件自行throw的异常
//对于异常我们可以自己处理try{}catch(Exception){},也可以不处理交由调用者处理,此时应像该代码一样声明throws
//所有未处理的可能抛出的异常
if (y==0){
throw new MyException();}
return x/y;
}
/**
* 这个类用于测试,另外有一个测试方法fun计算整数除法,会抛出一个我们定义的除零异常
* @author U__0
*
*/
public class Test {
public static int fun(int x,int y) throws MyException{
if(y==0)throw new MyException("除零错误");
return x/y;
}
public static void main(String[] args){
int a = 1;
int b = 0;
try {
int c = fun(a,b);
} catch (MyException e) {
// TODO Auto-generated catch block
e.printMessage();
}
}
}