Java异常处理:Part 1

 Java的异常处理
 1.生活小事:今天休假,我骑电瓶车去镇上网吧上网。
   问题1:走了一半,道路施工,路面重整 ,无法通过。          
         严重问题:不是我自身问题,我没法解决
   问题2:刚插钥匙,电量不足啊,昨晚忘记充电了。              
         出发前就该检查的问题,我自身的问题
   问题3:妈的,骑田沟里去了。                                                    
         行进中的事故问题,不一定是我自身的问题
   程序:也会碰到上述三类问题(不正常即异常)
   Throwable类是Java所有异常的超类;
   严重问题:Error(它有很多子类,这类异常我们不处理,我们也处理不了)
   普通问题:Exception(它也有很多子类 ,又分为两类 A、B)
   A.对应问题3,运行时异常RuntimeException;(这个我们也不处理,出现了,说明代码不严谨,修改 )
   B.非RuntimeException,编译时异常;(这是我们要处理的异常)
   如果程序出现异常我们不做处理,JVM会做默认的处理(method1):
      把异常的名称、原因及出现的位置等信息输出到控制台上,同时结束程序                   
 2.处理异常的语法(method2)
   A.try...catch...finally
     try{
           可能出现问题的代码 
     }catch(异常名  变量){
           针对问题的处理 
     }finally{
           释放资源
     }
     或变形格式:
     try{
           可能出现问题的代码 
     }catch(异常名  变量){
           针对问题的处理 
     }          
   B.throws 抛出
   注意点:try里面的代码越少越好;catch里面 必须有内容(没有等于忽略了异常)
 3.两个异常的处理
   A.每一个写一个try...catch(method3)
   B.写一个try多个catch
   注意点:
   能明确的尽量明确,不要用大的父类来处理;
   平级关系的异常无先后顺序,如果出现父子关系,则父在后(method5)。这是因为:
    一旦try里出现问题,它就会将问题抛出,与catch里的异常依次匹配,一旦匹配上,就执行catch里的处理,然后直接结束 try...catch,继续执行后面的代码(method4)
 4.JDK7出现了一个新的异常处理方案,用来处理多个异常(method6)
   try{
         可能出现问题的代码
   }catch(异常名1|异常名2...变量){
         针对问题的处理
   }
   A.这几类异常的处理方式是一致的(实际开发中,可能就是针对几种异常,给出同一种处理
   B.多个异常间必须是平级关系
package knowledge_basic_02;

public class ExceptionDemo {
    //以下例子虽然处理的是RuntimeException,但同样有演示的效果 
    //JVM默认的异常处理方式 (异常位置后不会被执行了)
    public static void method1()
    {
        int a=100;
        int b=0;
        System.out.println(a/b);
        System.out.println("over");
    }
    //一个异常处理
    public static void method2()
    {
        int a=100;
        int b=0;
        try{
        System.out.println(a/b);
        }catch(ArithmeticException ae){
            System.out.println("除数不能为 0!");
        }
        System.out.println("over");
    }
    //两个异常处理方式 1:每个异常一个try...catch
    public static void method3()
    {
        int a=100;
        int b=0;
        try{
        System.out.println(a/b);
        }catch(ArithmeticException ae){
            System.out.println("除数不能为 0!");
        }
        int[] arr=new int[]{1,3,5,7};
        try{
        System.out.println(arr[4]);
        }catch(ArrayIndexOutOfBoundsException e){
            System.out.println("访问了不存在的数组索引!");
        }
        System.out.println("over");
    }
    //两个异常处理方式 2:一个try多个catch
    public static void method4()
    {
        int a=100;
        int b=0;
        int[] arr=new int[]{1,3,5,7};
        try{
        System.out.println(a/b);
        System.out.println(arr[4]);
        }catch(ArithmeticException ae){
            System.out.println("除数不能为 0!");
        }catch(ArrayIndexOutOfBoundsException e){
            System.out.println("访问了不存在的数组索引!");
        }
        System.out.println("over");
    }
    //父异常必须在后面,否则会出错
    public static void method5()
    {
        int a=100;
        int b=0;
        int[] arr=new int[]{1,3,5,7};
        try{
        System.out.println(a/b);
        System.out.println(arr[4]);
        System.out.println("不太清楚的异常");
        }catch(ArithmeticException ae){
            System.out.println("除数不能为 0!");
        }catch(ArrayIndexOutOfBoundsException e){
            System.out.println("访问了不存在的数组索引!");
        }catch(Exception e){
            System.out.println("出问题了!");
        }
        System.out.println("over");
    }
    //JDK7新的处理多个异常的方式 
    public static void method6()
    {
        int a=100;
        int b=0;
        int[] arr=new int[]{1,3,5,7};
        try{
        System.out.println(a/b);
        System.out.println(arr[4]);
        }catch(ArithmeticException|ArrayIndexOutOfBoundsException e){
            System.out.println("出现问题了!");
        }
        System.out.println("over");
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //method1();
        //method2();
        //method3();
        //method4();
        //method5();
        method6();
    }

}

method1()结果:
Exception in thread “main” java.lang.ArithmeticException: / by zero
at knowledge_basic_02.ExceptionDemo.method1(ExceptionDemo.java:10)
at knowledge_basic_02.ExceptionDemo.main(ExceptionDemo.java:16)
method2()结果:
除数不能为 0!
over
method3()结果:
除数不能为 0!
访问了不存在的数组索引!
over
method4()结果:
除数不能为 0!
over
method5()结果:
除数不能为 0!
over
method6()结果:
出现问题了!
over

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值