#开始
刚开始接触Java的时候 看不到异常处理的意义所在 真是...现在发现似乎大有用处
#代码
package ch1; import java.rmi.RemoteException; public class myException{ public static void main(String[] args) throws RemoteException,myException2 { //这里需要定义抛出的异常类 try { int a=3; //修改这里抛出不同的异常 if(a==1) { throw new RemoteException("异常3"); //抛出一个默认的异常 } if(a==2) { throw new Exception("异常4"); //默认异常 } if(a==3) { throw new myException2("构造参数"); //抛出自定义异常 } }catch(RemoteException e) { System.out.println("异常:" + e.getMessage()); }catch(myException2 e) { System.out.println("异常:我自己的异常"); }catch(Exception e) //如果这个在catch(myException2 e)之前的话 这里就不会被执行 { System.out.println("异常:" + e.getMessage()); }finally { System.out.println("这里的代码总会执行"); } } } /* * 所有异常都必须是 Throwable 的子类。 * 如果希望写一个检查性异常类,则需要继承 Exception 类。 * 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。 * ***/ class myException2 extends Exception //自定义的异常类 需要继承 { public myException2(String str) { System.out.println("我自己的异常..." + str); } }
#解释
首先确定try和catch的用处 说说我的理解
在try代码块儿里可能出现异常 这里的异常出现的原因可以是很多的 比如数组越界 或者除数为零的情况 会抛出不同的异常(抛出什么异常可以看这里有完整的讲解:http://www.runoob.com/java/java-exceptions.html)
一旦抛出异常 该代码块儿里面的代码就不执行了
会跳转到相对应的catch代码块儿 并且执行里面的代码
如果可能抛出不同的异常 则自动匹配对应的catch代码块儿
但是finally代码块儿一定会执行无论是否有异常
#运行结果
#遇到的问题
1. 如果自定义了异常类 那么抛出的自定义异常所对应的catch块一定要在自定义异常类的catch块的前面 否则的话自定义异常所对应的catch块不会执行 报错
2. 不能在一个代码块里抛出两个异常 因为下面的异常不可能执行到 因为抛出一个异常之后 就跳转到catch里面了 会报错
3. finally代码块儿一定会执行无论是否有异常
如果有错误 请在下面留言 提醒一下 谢谢