------- android培训、java培训、期待与您交流! ----------
异常和java异常处理机制
在程序的实际应用中,可能存在大量的未知问题,所以在程序的开发过程中对于错误的处理是极其重要的。任何程序都很难做到百分百的完美,所以在程序的开发过程中就要对各种问题进行处理,而Java提供的异常处理机制就可以帮我们更好的解决这方面问题。
首先回忆一下Java的异常处理机制,在整个Java的异常处理中,实际也是按照面向对象的方式来处理的,而处理步骤如下:
- 一旦产生异常,首先会产生一个异常类的实例化对象。
- 在try语句中对此对象进行捕捉。
- 产生的异常对象和catch语句中各个异常类型进行匹配,若匹配成功,则执行catch语句中的代码。
之前学过多态性,于是我们知道,所有的子类实例全部可以使用父类来接收。那么,我们不就可以让所有的异常对象都用Exception类来接收吗?下面举例说明:
public class ExceptionDemo { public static void main(String[] args) { int i = 0; int j = 0; try{ String str1 = args[0]; //接收参数 String str2 = args[1]; i = Integer.parseInt(str1); j = Integer.parseInt(str2); int temp = i/j; //此处会产生异常 System.out.println("商为:"+temp); //此处代码不会执行 }catch(Exception e){ System.out.println("捕获到异常:"+e); //处理异常 } } }
throws和throw关键字
在定义一个方法时,我们可以用throws关键字来声明,使用throws关键字声明的方法表示此方法不处理异常,而交给方法的调用处理来进行处理,甚至主方法都可以使用throws关键字,如下面这个例子:
class Demo { public int div(int i,int j) throws Exception//该方法可不处理异常 { int temp = i/j; //此处可能产生异常 return temp; } } public class ThrowsDemo { //该方法中的异常可不用try…catch处理 public static void main(String[] args) throws Exception { Demo d = new Demo(); System.out.println("商为:"+d.div(6,3)); } }
而throw则不同,它可以直接抛出一个异常,抛出时直接抛出异常类的实例化对象即可。如:
public class ThrowDemo { public static void main(String[] args) { try{ throw new Exception("异常");//抛出异常的实例化对象 }catch(Exception e){ //捕获异常 System.out.println(e); } } }
综合实例
我们现在设计一个除法的方法,要求必须打印“开始”和“结束”信息,若有异常则交给调用处处理,这便需要我们把以上的知识点结合起来。代码如下:
通过合理搭配,我们完成了所需的功能,无论Demo类中的div()方法是否会产生异常,都会执行输出“结束”的语句,若有异常则交给调用处处理。这样便加深了对异常处理中关键字用法的理解,但要在开发中能灵活运用,还需多加练习才行。class Demo { //该方法可以不处理异常 public int div(int i,int j) throws Exception { System.out.println("开始"); int temp = 0; try{ temp = i/j; //若产生异常则执行catch }catch(Exception e){ //捕获异常 throw e; }finally{ //无论是否产生异常,finally段中代码都会执行 System.out.println("结束") return temp; } } public class ThrowDemo { public static void main(String[] args) { Demo d = new Demo(); try{ System.out.println("商为:"+d.div(6,0)); }catch(Exception e){ //捕获异常 System.out.println("捕获到异常:"+e); } } }