• java异常机制


    概述:异常是java程序运行时出现的一些意外情况。

    异常的分类:所有的异常都继承自java.lang.Trowable类,Trowable类有两个直接子类,Exception和error。

    异常的层次结构图:

                 

    error是java程序本身无法恢复的严重错误,一般不进行捕获,处理,一般是通知用户并终止程序执行。

    检查时异常一般是由通过throws抛出的,该方法的调用者必须在调用该方法时进行捕获、处理,否则将不能进行编译。

    异常的处理:使用try{

                        }catch(Exception e){

           }finally{

           }

    示例:

    public class Test {
        public static void main(String[] args) {
            try{
                String [] s={"l","u","n"};
                for(int i=0;i<=s.length;i++){
                    System.out.println(s[i]);
                }
                System.out.println("gg");
            }catch(ArrayIndexOutOfBoundsException e){
                e.printStackTrace();
            }catch(Exception e){
                System.out.println("程序出错!");
                System.out.println(e.getMessage());
                e.printStackTrace();
            }finally{
                System.out.println("very good");
            }
            
        }
    }

    try中如果发生异常,那么之后的代码将不会执行,将跳转到catch中。

    在catch中 把ArrayIndexOutOfBoundsException封装到对象e中,可以用对象e来输出栈中的错误信息。

    finally带码块一定会被执行(除了一种情况外,在catch中出现 System.exit(1)会结束JVM,不执行finally中的代码),即使在catch中写有return 语句finally中的代码依然执行。执行的过程先执行catch中return之前的代码,然后执行finally中的代码,接着回到return 返回结果。(如果最后面也有return 则该return 并不会执行)

    示例:

    public class Test_Runtime {
        public static int Conver(){
            int a=10;
            try {
                //System.out.println(a);
                int b=5/0;
                //System.out.println(a);
            } catch (Exception e) {
                a=20;
                return a;//执行到这将跳到finally中执行,执行完finally中的代码,然后回到这
            }finally{
                a=30;
                System.out.println(a);
            }
            return a;//该句不会被执行
        }
        public static void main(String[] args) {
            int a=Conver();
            System.out.println(a);
        }
    }

    输出的结果为:20    执行完finally后回到return 返回结果, 但是如果finally中也有返回语句则会直接返回,不会在回到catch中。

    示例:

    public class Test_Runtime {
        public static int Conver(){
            int a=10;
            try {
                //System.out.println(a);
                int b=5/0;
                //System.out.println(a);
            } catch (Exception e) {
                a=20;
                return a;
            }finally{
                a=30;
                return a;//在该处返回,不会在回到catch
            }
        }
        public static void main(String[] args) {
            int a=Conver();
            System.out.println(a);
        }
    }

    输出结果:30

    如果返回的是引用(可以证明finally里面的代码确实执行了)

    public class TestException {
            public static int[] Conver(){
                int []a=new int[10];
                try {
                    int b=5/0;
                    //System.out.println(a);
                } catch (Exception e) {
                    a[0]=10;
                    System.out.println(a[0]);
                    return a;//执行到这将跳到finally中执行,执行完finally中的代码,然后回到这
                }finally{
                    a[0]=30;
                    System.out.println(a[0]);
                }
                return a;//该句不会被执行
            }
            public static void main(String[] args) {
                int[] a=Conver();
                System.out.println(a[0]);
            }
    }

    输出结果 10  30   30 

    throw 和throws关键字的区别:throw在方法体内,只能抛出一个异常,在方法体内进行处理,也可以不处理,但必须用throws向外抛出,由方法的调用者去处理。

                                             throws在方法体外,紧跟方法名后,一般为检查时异常,方法的调用则一般要进行处理(也可以继续向外抛)。

                                             throws表示异常可能发生,但不一定会发生,throw表示抛出异常的这种动作,异常一定发生。

    自定义异常时一般继承Exception或者RuntimeException即可。

     

  • 相关阅读:
    tcp发送缓冲区中的数据都是由产生数据的进程给推送到ip层还是有定时任务触发?
    发生dev_queue_xmit的时候,全部都是从ip_finish_output中来的吗
    网络控制API 路由表 arp表 包括tcp的这些参数都是从哪里设置
    dev_queue_xmit 发生了什么?skb还会在哪里缓存
    内核blackhole
    网卡多ip 再看arp; arp队列也会缓存skb
    tcp发送缓冲区中的数据都是由产生数据的进程给推送到ip层还是有定时任务触发?
    socket有没有同步写一说(怎么判定数据一定达到了对端?还得用户态)
    貌似要看看时钟了
    读写JSON作配置文件
  • 原文地址:https://www.cnblogs.com/coderising/p/5705273.html
Copyright © 2020-2023  润新知