Java 异常处理

#开始

  刚开始接触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代码块儿一定会执行无论是否有异常

如果有错误 请在下面留言 提醒一下 谢谢

posted @ 2018-04-24 23:37  Startu  阅读(286)  评论(0编辑  收藏  举报