• 10异常


    1.什么是异常

     在java中针对问题的反馈以及处理的一套机制。

    2.具体介绍

    异常分两种:

    Exception:是一个合理的应用程序,出现之后可以处理也可以不处理。jvm发生,并告诉使用者。可以进行针对性处理

    Error:是一个合理(符合语法且代码执行逻辑没有问题)的应用程序,由系统底层发生的,告诉jvm,jvm告诉使用者问题严重,如果一旦发生,不做针对性处理的解决途径只有一个:修改代码 不如内存溢出

    它两的父类:Throwable:定义了对于问题的共性的功能。所有问题异常的超类

    3.Exception分类

    1.运行时异常----编译没错,运行有错 可以处理也可以不处理 总的运行时异常父类是 RuntimeException

    2.编译时异常---编译有错,一定要处理(抛出或者捕获)

    4.自定义异常

    public class ExceptionDemo2 {
        
        public static void main(String[] args) {
            //读取文件内容
            //方法抛出的异常,方法的调用者需要进行异常的处理
            //try块---存放可能会出错的代码
            //如果try块出错了就用catch块进行捕获处理
            //try-catch一定会直接结束,执行下一个语句
            //方法上抛出了几个编译时异常就处理几个编译时异常
            try {
                String s=readTxt(null);//要读取的是.txt
                //捕获的是异常类的对象
            } catch (PathNotExitsExption e) {//new PathNotExitsExption()
                // TODO Auto-generated catch block
                //处理异常
                System.out.println(e.getMessage());
            }catch(FileNotExitsException e){
                //处理异常
                System.out.println(e.getMessage());//父类属性
            }catch(NullPointerException e){
                //打印异常的栈轨迹
                e.printStackTrace();
            }
            //读取完成
            //当异常捕获之后后面的代码正常执行
            System.out.println("读取文件完毕。。");
        }
        //方法上抛出异常---可以抛出多个异常
        //方法上必须抛出的异常时编译时异常
        public static String readTxt(String path) throws PathNotExitsExption, FileNotExitsException,NullPointerException{
            //判断参数是否为null
            if(path==null){
                //反馈问题
                //可以处理也可以不处理
                throw new NullPointerException("亲,参数为null...");
            }
            
            //可能文件类型不对
            //对文件类型进行判断
            if(!path.endsWith(".txt")){//不是txt的文件类型都会进来
                //反馈问题
                throw new FileNotExitsException("亲,文件类型有问题...");
            }
            //可能会出现文件所在路径不存在
            //对路径进行判断
            if(path.startsWith("H")){//如果以H盘符开头就不存在
                //问题的反馈
                //抛出异常---后面所有代码都不执行    ----抛出一个异常类对象
                throw new PathNotExitsExption("亲,你的路径有问题...");
            }
            //开始读取文件内容..
            return "文件的内容";
        }
    }
    
    //自定义异常类  继承异常类
    //如果不继承RuntimeException就是编译时异常
    class PathNotExitsExption extends Exception{
        //属性
        private String message;
        //有参构造
        public PathNotExitsExption(String message) {
            // TODO Auto-generated constructor stub
            this.message=message;
        }
        //
        public String getMessage(){
            return message;
        }
    }
    
    //自定义异常类
    class FileNotExitsException extends Exception{
        //
        public FileNotExitsException(String message) {
            // TODO Auto-generated constructor stub
            super(message);//调用父类有参构造,给父类属性赋值
        }
    }

    5 throw和throws

    6.捕获的方式

    1.所有捕获异常可以用他们的公共父类来处理

    try {
                String s=readTxt(null);//要读取的是.txt
                //捕获的是异常类的对象
            } catch (Exception e) {//可以统一处理捕获的不同异常
                // TODO Auto-generated catch block
                //处理异常
                System.out.println(e.getMessage());
            }

    2.抛出的所有异常进行单独处理,在catch块中进行单独的捕获与处理

     try {
                String s=readTxt(null);//要读取的是.txt
                //捕获的是异常类的对象
            } catch (PathNotExitsExption e) {//new PathNotExitsExption()
                // TODO Auto-generated catch block
                //处理异常
                System.out.println(e.getMessage());
            }catch(FileNotExitsException e){
                //处理异常
                System.out.println(e.getMessage());//父类属性
            }catch(NullPointerException e){
                //打印异常的栈轨迹
                e.printStackTrace();
            }

    3.在jdk1.7以后有个分组的概念,可以按照分组来处理各组的异常

        try {
                String s=readTxt(null);//要读取的是.txt
                //捕获的是异常类的对象
            } catch (PathNotExitsExption |FileNotExitsException |NullPointerException e) {//new PathNotExitsExption()
                // TODO Auto-generated catch block
                //处理异常
                System.out.println(e.getMessage());
            }

    抛出的异常希望进行分组处理,jdk1.7提供分组捕获,一组之间的异常通过在catch之间用|连接

    7.异常捕获后的异常信息显示

    8.父类的异常捕捉要放到子类的最后面,这就相当于捕获到剩下没有捕获的异常

        try {
                String s=readTxt(null);//要读取的是.txt
                //捕获的是异常类的对象
            } catch (PathNotExitsExption e) {//new PathNotExitsExption()
                // TODO Auto-generated catch block
                //处理异常
                System.out.println(e.getMessage());
            }catch(FileNotExitsException e){
                //处理异常
                System.out.println(e.getMessage());//父类属性
            }catch(NullPointerException e){
                //打印异常的栈轨迹
                e.printStackTrace();
            }
            catch (Exception e) {
                System.out.println("放最后没错,放前面会报错");
            }

    9.finally块无论代码有没有出现异常,finally块里面的代码都是要执行的

  • 相关阅读:
    iOS开发自定义转场动画
    自定义UICollectionViewLayout之CATransform3D
    iOS开发CATransform3D.h属性详解和方法使用
    iOS开发CGImage.h简介
    iOS开发使用UIScrollView随笔
    iOS界面动画特效
    iOS绘制线条的使用
    iOS开发本地推送(iOS10)UNUserNotificationCenter
    iOS开发本地推送
    iOS开发NSFetchedResultsController的使用CoreData和TableView数据同步更新
  • 原文地址:https://www.cnblogs.com/xuwangqi/p/11207904.html
Copyright © 2020-2023  润新知