• 异常处理


    错误:
        1.语法错误:
            有语法问题无法编译       
     
        2.运行时错误:
            可以编译,但执行过程中出错.级别低的就是异常
     
        3.逻辑错误:
            运行的顺序,条件或者计算方法出错.能编译能运行,不报错,但结果出错.
     
    Exception异常类型,是错误的子类(Error)
    五个关键字处理异常,两种方法(处理和向上抛)
    try catch finally throw throws
     
    用法1:作为代码块的一个部份,处理异常
        try{
     
        }catch(异常类型 变量){
     
        }finally{       
     
        }
    用法2:定义方法时定义异常,并抛出异常
     
        public void fun() throws 异常类型{
     
            if(条件)
                throw new 异常();
     
        }
     
     
    =============================================
    1.处理异常(捕获异常)
        try,catch,finally用法
     
        try{
            //可以会发生错误的代码
        }catch(异常类型  变量){
            //错误的处理代码       
        }finally{
            //始终要执行的代码
            //一般情况用于释放资源
        }
     
     
     
     
        注意:
            1.try必须跟至少一个catch或finally块,try不能单独存在。
            2.catch块可以有多个,但是异常类型必须不同(先子类后父类)。
            3.所有非RuntimeException类型(及子类)的异常必须处理
     
        异常处理:
        1.强置受检
        2.可以不受检,RuntimeException及子类可以不处理
     
     
        try代码是用于监控代码块,可能会发生异常的代码
        catch代码块处理异常,如果发生异常就执行匹配类型catch块
        finally代码块是无论有没有错误都去执行代码块
     
    ======================================
    1.处理异常(抛出异常)   
        throw和throws的用法
     
        Exception ex = new Exception();//创建一个异常对象
        throw ex;//抛出异常对象
     
        或
     
        throw new Exception();//抛出一个匿名异常对象
     
        使用throw关键字在代码块中抛出异常
        一般用法:
            if(条件)
                throw ...
     
        注意:
            如果抛出异常,可以马上捕获或者向上抛出
     
        示例:声明一个设置年龄的方法,并向上抛出异常
        public void setAge(int age) throws RuntimeException{
            //参数不为负数
            if(age<0)
                throw new RuntimeException("年龄不能为负数");
     
            this.age = age;
        }
        或者
        //如果抛出异常,可以马上捕获,不建议使用
        public void setAge(int age){
            //参数不为负数
            try{
                if(age<0)
                    throw new RuntimeException("年龄不能为负数");
            }catch(RuntimeException e){
                //处理异常的代码;
            }
            this.age = age;
        }
     
     
     
     
     
     
     
    ============自定义异常===================
    //自定义异常,必须继承Exception类(子类),名称为区别于普通类,一般定义为Exception结尾
    class XxxxException extends Exception{
        public XxxxException(){}
        public XxxxException(String message){super(message)};
    }
     
     
     
     
    示例:设置不能为负数的年龄异常
    class AgeException extends Exception{
        public AgeException(){
            super("年龄不能为负数!");
        }
        public AgeException(String message){
            super(message);
        }
    }
    使用异常
    class Student{
        private String name;
        private int age;
     
        public void setName(String name){
            this.name = name;
        }
        public String getName(String name){
            return name;
        }
        //定义设置年龄,可能出现异常
        public void setAge(int age)
            throws AgeException{
            if(age<0)
                throw new AgeException();//throw抛出一个错误对象
            this.age = age;
        }
        public int getAge(){
            return age;
        }
     
        public String toString(){
            return "姓名:"+name+"年龄:"+age;
        }
    }
     
    public class Test{
        public static void main(String args[]){
            Student s1 = new Student();
            s1.setName("张三");
            try{
            s1.setAge(18);//可能发生错误
            }catch(AgeException e){
                System.out.println("年龄出错:"+e.getMessage());
            }
     
            System.out.println(s1);
        }
    }
     
        Throwable:Throwable 类是 Java 语言中所有错误或异常的超类。
        Error:
            Error 是 Throwable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题。
        Exception:
            Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。
                有很多的子类,常见子类
                RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。
     
                IOException 输入输出异常
     
     
     

    1.异常类型
        Exception异常根类
            常见子类
                受检类型(Checked)
                    IOException:输入输出异常
                    SQLException:sql异常
                    ClassNotFoundException:找不类
                    ...
                不受检类型(unchecked)
                    RuntimeException
                        NullPointerException:引用的对象是null
                        IndexOutOfBoundsException:下标越界
                            ArrayIndexOutOfBoundsException
                            StringIndexOutOfBoundsException
                        ClassCastException:类型转换出错
                        ...
     
    2.捕获异常
        try{
            //代码块
        }catch(异常类型  ex){
            异常处理
        }
     
        //JDK1.7+,可以同时匹配多个异常类型
        try{
            //代码块
        }catch(异常类型1|异常类型2|...  ex){
            异常处理
        }
     
        try{
            //代码块
        }catch(异常类型1 ex){
            异常处理
        }catch(异常类型2 ex){
            异常处理
        }catch...
     
     
        try{
            //代码块
        }finally{
            始终要执行的代码块(释放资源)
        }
     
        //JDK1.7+,可以自动释放资源
        try(资源){
            //代码块
        }catch(异常类型  ex){
            异常处理
        }
     
     
        try{
            //代码块
        }catch(异常类型  ex){
            异常处理
        }finally{
            始终要执行的代码块
        }
     
     
    3.抛出异常
        在声明方法时,声明异常同时在代码块中抛出异常
        public void fun() throws 异常类型1,异常类型2,...{
            if(条件)
                throw new XxxException1();
     
            try{
                ...
            }catch(XxxException2 ex){
                throw ex;
            }
        }   
     
     
    4.自定义异常类型
        1.必须继承Exception或Exception的子类
        2.名称建议以Exception结尾,标注是一个异常类型
     
        public X1Exception extends Exception{
            public X1Exception(){super("默认的错误提示信息!");}
            public X1Exception(String msg){super(msg);}
        }   
     
        public X2Exception extends RuntimeException{
            public X1Exception(){super("默认的错误提示信息!");}
            public X1Exception(String msg){super(msg);}
        }
     
    void fun1(){   
        1....
        try{
            2...
            3...
            4...
        }catch(IOException e){
            5...
        }catch(RuntimeException e){
            6...
        }finally{
            7...
        }
        8...
    }
    如果没有执行时没有异常,执行顺序:
        123478   
     
    如果执行时2行发现IO异常,执行顺序:
        12578
     
    如果执行时3行发现NullPointer异常    ,执行顺序:
        123678
     
    如果执行时4行发现ClassNotFound异常,执行顺序:(题有问题,ClassNotFoundException必须处理)
        12347
     
     
     
     

     
     
    1    ...
    2    try{
    3        ...
    4        ...
    5        ...
    6        ...
    7    }catch(异常类型1  变量){
    8        错误的处理代码       
    9    }catch(异常类型2  变量){
    10        错误的处理代码       
    11    }finally{
    12        始终要执行的代码
    13    }
    14    ...
     
    如果代码没有任何异常,执行顺序
        1->3->4->5->6->12->14
    如果代码4发生"异常类型1"异常,执行顺序
        1->3->8->12->14
    如果代码6发生"异常类型2"异常,执行顺序
        1->3->4->5->10->12->14
    如果代码5发生异常与“异常类型1和类型2”都不匹配,执行顺序
        1->3->4->12
     
     
     
     
    throw
     
     
     
     

     
     
  • 相关阅读:
    sed 使用总结
    rgmanager 介绍
    linux nbd & qemu-nbd
    corosync基本使用
    svn 基本使用
    tornado 实践
    mysql mac启动
    postgresql
    django
    django
  • 原文地址:https://www.cnblogs.com/zachary7/p/8191512.html
Copyright © 2020-2023  润新知