本帖最后由 caijunsong 于 2014-3-26 10:58 编辑
throws声明抛出异常只能在方法中的签名中使用,也就是说throws只能放在方法(函数)后,并写出异常类,表示抛出无法处理的异常
当方法无法处理抛出的异常的时候 我们可以通过throws把异常抛给方法的上一级调用者,如果上一级调用者还是无法处理,继续可以向上抛,知道抛给jvm处理,jvm的默认处理就是打印错误堆栈信息,
throw 只能放在方法中,用于抛出自定义异常- class ChuException extends RuntimeException
- {
- ChuException(String r)//定义了一个除数异常
- {
- super(r);
- }
- }
- class BCException extends RuntimeException
- {
- BCException(String r)//定义了一个被除数的异常
- {
- super(r);
- }
- }
- public class ExceptionDemo
- {
- public static int div(int i,int j)<FONT color=darkgreen>throws BCException,ChuException//多个抛出类用都好隔开
- </FONT> {
- if(j==0)
- <FONT color=red> //当被被除数为0,就用throw抛出自定义的被除数异常
- </FONT> throw new ChuException("除数不能为0");
- if(i<0)
- <FONT color=red>//当我们定义除数小于零的时候就抛出除数异常
- </FONT> throw new BCException("被除数必须大于0");
- return i/j;
- }
- public static void main(String[]agrs)//<FONT color=darkgreen>throws ChuException,BCexception(main不在方法中处理完就得抛
- </FONT> {
- int m=-1;//m=1
- int n=0;
- try
- {
- int s=div(m,n<FONT color=red>);//在main方法中调用了div方法,也就是说main是div的上一级调用者
- } //如果div抛出了异常,main要么的用try。。catch。。来处理,要么它没处理
- //就得在方法后抛出异常(上一级调用者是jvm)</FONT>
- catch(BCException|ChuException e1)
- {
- e1.printStackTrace();
- }
- <FONT color=red>//如果抛出的异常种类较多,catch就得捕获相应的异常
- //处理方式就是在catch中把多个异常类用”|"隔开
- </FONT> System.out.println("程序运行结束!!");
- }
- }
- //程序我们把m用了1和-1分别带入测试,n用0带入,结果发现如果m=-1,n=0,的时候只能抛出一个异常,因为程序
- //只要抛出一个异常,程序立马暂时中断等待处理,处理完之后就跳回程序的下一步
复制代码 |