zoukankan      html  css  js  c++  java
  • javase基础11

    1.异常的概念

    A:异常:就是程序运行中出现的不正常的情况.
    B:异常的由来:程序中的问题也是现实生活中的一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象.

    2.异常的分类

    :异常的继承体系
    Throwable
    Error (错误:一出现就是致命的)
    服务器宕机,数据库崩溃等
    Exception
    RuntimeException(运行时异常,一般都是程序员犯得错误,需要修改源码的.)
    编译时异常:在编译时必须进行处理,不处理无法通过编译.

    3.异常的处理方式

    try{
      需要检测的异常;
    } catch(异常类名 异常变量) {
      异常处理代码
      可以调用异常的方法
      通常我们只使用一个方法:printStackTrace打印异常信息
    }

    public static void main(String[] args) {
            //指定文件
            Scanner sc = new Scanner(System.in);
            String path = sc.next();
            
            try {
                FileWriter fw = new FileWriter(path);
                System.out.println("输出成功了");
            } catch(IOException e) {
                System.out.println("您输入的路径有误!");
                //用于展示异常出现的位置和基本信息
                e.printStackTrace();
            }
            
            System.out.println("后边的代码");
    }

    4.使用throws关键字处理异常


    throws的方式处理异常
    定义功能方法时,需要把出现的问题暴露出来让调用者去处理。
    那么就通过throws在方法上标识
    修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) throws 异常类名{}

    /*
     * 运行时异常处理:
     *         该异常在编译期不检查语法错误的.可以处理,也可以不处理.    
     * 
     *         一般情况下,遇到java自身提供的运行时异常,都可以通过逻辑解决,避免异常产生.
     *         常见运行时异常:空指针异常,索引越界异常,类型转换异常
     * 
     * 声明抛出处理
     * 捕获处理
     */
    public class Demo1runtime_exception {
    
        public static void main(String[] args) {
            
            try {
                System.out.println(10/0);
            } catch (ArithmeticException ae) {
    //            可以打印异常信息,也可以不打印
    //            ae.printStackTrace();
                
    //            如果出现异常的话
                System.out.println("除数不能为0!");
            }
            System.out.println("后边的代码");
            
            
            try {
                method();
            } catch (ArithmeticException ae) {
                System.out.println("除数不能为0!");
            }
        }
        
        public static void method() throws ArithmeticException{
            System.out.println(10/1);
        }
    
    }

    5.try…catch处理多个异常格式

    try{
      需要检测的异常;
    } catch(异常类名1 异常变量1) {
      异常处理代码
      可以调用异常的方法
      通常我们只使用一个方法:printStackTrace打印异常信息
    } catch(异常类名2 异常变量2) {
      异常处理代码
      可以调用异常的方法
      通常我们只使用一个方法:printStackTrace打印异常信息
    }……//可以有无数个catch

    6.throws 处理多个异常格式

    修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) throws 异常类名1,异常类名2……{} 

    /*
     * 多异常处理一:
     *         声明抛出处理,直接抛出多个异常即可
     * 
     * 多一场处理二:
     *         一个try多个catch的方式
     * 
     * java是中断异常的处理方式
     */
    public class Demo2multi_exception01 {
    
        public static void main(String[] args) {
            
            //一个try多个catch的方式
            try{
                method();
            }catch(ArithmeticException ae) {
                System.out.println("您的除数不能为0");
            }catch(IOException e) {
                System.out.println("您要访问的文件不存在");
            }
            
            System.out.println("abc");
        }
    
        //一个方法声明抛出多个异常
        public static void method() throws ArithmeticException,IOException{
            
            System.out.println(10/1);
            System.out.println("method逻辑1完成");
            method2();
            System.out.println("method逻辑2完成");
        }
        public static void method2() throws IOException {
            //指定文件
            Scanner sc = new Scanner(System.in);
            String path = sc.next();
            FileWriter fw = new FileWriter(path);
        }
    }

    7.多个异常用一个catch处理格式

    try{
      需要检测的异常;
    } catch(异常类名1|异常类名2…… 异常变量) {
      异常处理代码
      可以调用异常的方法
      通常我们只使用一个方法:printStackTrace打印异常信息
    }

    8.异常在继承中的注意事项

    a:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)
    b:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
    c:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

    9.finally关键字

    try{
      需要检测的异常;
    } catch(异常类名 异常变量) {
      异常处理代码
      可以调用异常的方法
      通常我们只使用一个方法:printStackTrace打印异常信息
    }finally{
      此处存放一定要执行的代码
      一般把释放资源的代码放到finally中
    }

    /*
     * 在try/catch后可以追加finally代码块,其中的代码一定会被执行,通常用于资源回收。
     */
    public class Demo1finally {
    
        public static void main(String[] args) {
            
            //编译时异常
            //"C:/javaSE/11code/myException/a.txt"
            //指定文件
            Scanner sc = new Scanner(System.in);
            String path = sc.next();
            
            try {
                FileWriter fw = new FileWriter(path);
                fw.write("abc");
            } catch (IOException e) {
                System.out.println("产生了IO问题");
            } finally {
                System.out.println("我要关闭资源");
            }
            
            System.out.println("abc");
        }
    }

    10.自定义异常

    Class 异常名 extends Exception{ //或继承RuntimeException
      public 异常名(){
      }
      public 异常名(String s){
        super(s);
      }
    }

    /*
     * 自定义异常:
     *         编译时异常继承Exception,运行时异常继承RuntimeException。
     *         关键字throw 抛出异常
     *         回忆产生异常:
     *             创建异常对象
     *             抛出异常
     */
    public class Democustom_exception {
    
        public static void main(String[] args) {
    
            //年龄小于18岁,产生异常
            Scanner sc = new Scanner(System.in);
            int age = sc.nextInt();
            
            if(age < 18) {
                //产生异常
                //创建异常对象
                U18Exception u18 = new U18Exception("年龄小于18岁");
                //抛出异常
                try {
                    throw u18;
                } catch (U18Exception e) {
                    System.out.println("年龄不满足婚恋网站年龄");
                    e.printStackTrace();
                }
            }
            
            
            //可以直接手动创建异常对象
            try {
                throw new RuntimeException("我产生了一个运行时异常");
            } catch (Exception e) {
                System.out.println("直接创建了一个runtimeexception对象");
            }
            
            System.out.println("abc");
        }
    
    }
  • 相关阅读:
    从0到1构建适配不同端(微信小程序、H5、React-Native 等)的taro + dva应用
    一个基于Ionic3.x cordova的移动APP demo
    基于 MUI 构建一个具有 90 +页面的APP应用
    风清杨之Oracle的安装与说明
    浅析C#中的“==”和Equals
    window.open()的使用
    动态生成级联下拉框和多选框
    生成二维码的两种方式
    登录添加验证码校验
    oracle11g的安装以及配置
  • 原文地址:https://www.cnblogs.com/learnjfm/p/6956501.html
Copyright © 2011-2022 走看看