首页 > 编程语言 > 详细

java异常-基础

时间:2021-08-16 14:50:02      阅读:16      评论:0      收藏:0      [点我收藏+]

一、异常结构:

  • 基类:Throwable

  技术分享图片

  • Error:描述了 JAVA 程序运行时系统的内部错误,通常比较严重,除了通知用户和尽力使应用程序安全地终止之外,无能为力,应用程序不应该尝试去捕获这种异常。通常为一些虚拟机异常,如 StackOverflowError 等。
  • Exception:类型下面又分为两个分支,一个分支派生自 RuntimeException,这种异常通常为程序错误导致的异常;另一个分支为非派生自 RuntimeException 的异常,这种异常通常是程序本身没有问题,由于像 I/O 错误等问题导致的异常,每个异常类用逗号隔开。
二、异常分类:受检异常和非受检异常
  • 受检异常:受检异常会在编译时被检测。如果一个方法中的代码会抛出受查异常,则该方法必须包含异常处理,即 try-catch 代码块,或在方法签名中用 throws 关键字声明该方法可能会抛出的受查异常,否则编译无法通过。如果一个方法可能抛出多个受查异常类型,就必须在方法的签名处列出所有的异常类。(值得注意的是:如果在最高层使用try...catch捕获了异常,但未在Catch块内做处理。则在底层产生的BUG不易被发现
  • 非受检异常:非受检异常不会在编译时被检测。JAVA 中 Error 和 RuntimeException 类的子类属于非受查异常,除此之外继承自 Exception 的类型为受查异常

三、异常处理
  1. 通过 throws 关键字声明可能抛出的异常。
    new FileReader(file)需要检查FileNotFountException异常,bufferedReader.close()需要检查IOException,由于FileNotFoundException是IOException的子类,所以可以只抛出IOExcetion。
    /**
         * 方法签名 抛出异常
         * @param filePath 文件路径
         */
        public static void readFile(String filePath) throws FileNotFoundException {
            File file = new File(filePath);
            FileReader reader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(reader);
    //        bufferedReader.close();
        }
    /**
         * 方法签名 抛出异常
         * @param filePath 文件路径
         */
        public static void readFile(String filePath) throws IOException {
            File file = new File(filePath);
            FileReader reader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(reader);
            bufferedReader.close();
        }

  2. 使用try...catch语句块处理,推荐使用try...with resource自动关闭资源
    /**
         * 方法签名 抛出异常
         * @param filePath 文件路径
         */
        public static void readFile(String filePath){
            try {
                FileReader reader = new FileReader(filePath);
                BufferedReader bufferedReader = new BufferedReader(reader);
                // 手动关闭
                bufferedReader.close();
            } catch (IOException e){
                log.error(e.getLocalizedMessage());
            } finally {
                // do something
            }
    
            try(FileReader reader = new FileReader(filePath);
                BufferedReader bufferedReader = new BufferedReader(reader)){
                // 自动关闭,不需要下面一行代码
                // bufferedReader.close();
                // do something
            }catch (IOException ioException){
                log.error(ioException.getLocalizedMessage());
            }
        }
  3. 处理后再抛出(可能需要给上层代码提供异常反馈,注意:此时需要在方法签名处使用throws关键字声明抛出异常
    /**
         *
         * @param parama
         * @throws Exception
         */
        public static void exceptionTest(String parama) throws Exception {
            try{
                // some code
            }catch(Exception e){
                log.error(e.getLocalizedMessage());
                throw new Exception("自定义异常/其他异常");
            }
        }

     

四、捕获异常(同等级异常可以使用“|”分割,用一个catch捕获)  

/**
     *
     * @param filePath
     * @throws Exception
     */
    public static void exceptionTest(String filePath) throws IOException {
        try {
            FileReader reader = new FileReader(filePath);
            BufferedReader bufferedReader = new BufferedReader(reader);
            // 手动关闭
            bufferedReader.close();
            File file = new File(filePath);
            file.delete();
        }catch(FileNotFoundException | FileSystemException e){
            log.error(e.getLocalizedMessage());
        }
    }

 



 

java异常-基础

原文:https://www.cnblogs.com/lishangquanblgs/p/15146999.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!