zoukankan      html  css  js  c++  java
  • 异常处理

    错误:
        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
     
     
     
     

     
     
  • 相关阅读:
    You are not late! You are not early!
    在同一个服务器(同一个IP)为不同域名绑定的免费SSL证书
    Vue.js Is Good, but Is It Better Than Angular or React?
    It was not possible to find any compatible framework version
    VS增加插件 Supercharger破解教程
    Git使用ssh key
    Disconnected: No supported authentication methods available (server sent: publickey)
    VS 2013打开.edmx文件时报类型转换异常
    asp.net MVC4 框架揭秘 读书笔记系列3
    asp.net MVC4 框架揭秘 读书笔记系列2
  • 原文地址:https://www.cnblogs.com/zachary7/p/8191512.html
Copyright © 2011-2022 走看看