Java.异常:自定义异常类,throw,throws,try...catch,finally

//自定义负数异常类 class myException extends Exception { public myException(String msg) //构造方法 { super(msg); //调用Exception异常类的构造方法 } } class Test { public int devide(int x,int y) throws myException //由于方法体内使用了throw,又没有try....catch进行处理,所以用throws声明 { if (y<0) throw new myException("异常信息:被除数小于零!"); //方法内使用了throw抛出了异常对象,如果方法内没有try....catch语句对这个抛出的异常进行处理,则此方法应声明抛出异常throws XxxException,由该方法的调用者负责处理。 if (y==0) throw new myException("异常信息:被除数不能为零!"); return x/y; } } class TestException { public static void main(String [] args) { try { int result=new Test().devide(3,1); //int result=new Test().devide(3,0); //int result=new Test().devide(3,1); System.out.println("the result is "+result); //return; } catch(myException e) { System.out.println(e.getMessage()); //System.exit(0); } /* //ArtthmeticException 算术运算异常类。比如除以零。 catch(ArithmeticException e) { System.out.println("异常信息:"+e.getMessage()); //调用了异常类的getMessage方法 System.out.print("异常堆栈迹:"); e.printStackTrace(); //调用异常类printStackTrace方法,打印异常详情 } */ catch(Exception e) //前面没能处理的所有异常都由Exception处理。由于Exception是所有异常类的父类,所以这句不能放到其他语句的前面。否则编译的时候会出错。 { System.out.println("异常信息:"+e.getMessage()); //return; } finally { System.out.println("the pragram is running into finally"); } //finally语句块。即使try和catch语句块使用return语句退出了当前方法或break跳出某个循环,相关的finally代码块都不会受影响的执行。 //finally代码块唯一不能执行的情况是在被保护的代码块中执行了System.exit(0) //每个try语句必须有一个或者多个catch语句与之对应,try代码块、catch代码块及finally代码块之间不能有其他语句。 System.out.println("the pragram is running here!"); //当catch语句中使用了return或者System.exit(0)语句是,这里的代码就不会执行了。 } }

你可能感兴趣的:(Java.异常:自定义异常类,throw,throws,try...catch,finally)