zoukankan      html  css  js  c++  java
  • 对Java中的异常的理解

    1.What is exception in Java?

     Java使用异常描述程序中可能出现的不正常情况。这个不正常可以是java认为的不正常,也可以是你主观上的出乎意料(自定义异常).总而言之,异常用于表示程序中的不正常现象。

    2.Why use exception in Java?

     ① 异常分离程序中正常逻辑代码和非正常情况处理问题的代码.提升代码的可读性

     ② 引入异常处理机制,大大提升系统的健壮性.

    3.Use Exception

    when to use?

    ① 如果方法执行过程中可能会遇到一些非正常的情况,应该抛出异常.(例如:读取不存在的文件。具体怎么抛下面会讲到)

    ② 异常本质就是用于描述非正常情况,不要使用异常来描述一些正常的或者合理的现象.(即主观上将正常现象做异常处理,例如:用户登录时,如果输入的用户名或者密码错误,可以抛出异常.但如果将用户名或者密码输入错误视为一种正常现象,就不要用异常来处理这种情况.)

    CheckedException vs UncheckedException

    Concept:CheckedException是编译时异常,也就是代码中必须处理的异常<异常的处理方式请参考其他资料,本文主要讲正确使用异常,并不涉及具体语法>.UncheckedException是运行期异常。(如果您对编译时异常和运行时异常还不甚了解,建议先参考其他资料)

    Should CheckedException Or UnCheckedException?

    一般原则:如果你觉得应该由客户端程序员(调用你代码的人)来处理非正常情况,抛编译时异常。如果客户端程序员不遵守约定(例如:传参错误)而造成的非正常情况,使用运行时异常.

    我的理解:将编译时异常视为一种调用时的善意提醒,由调用者来处理。将运行时异常视为一种不遵守约定的惩罚,只有调用者不遵守规则才给出警告,正常调用的情况下,异常对调用者透明.

    Ok,说了这么多,咱们看看Java API中是如何使用异常的?

    package com.java.basic;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class ExceptionDemo {
        /**
         * 打印文件的内容
         * @param filePath
         * @throws IOException 
         * ps:FileNotFoundException是IOExcpetion的子类,此处只是做demo用
         */
        public static void printFileContent(String filePath) throws FileNotFoundException,IOException{
            // 此处抛的是编译时异常,善意提醒调用者,可能会出现文件找不到的情况,由调用者负责处理异常
            BufferedReader br = new BufferedReader(new FileReader(new File(filePath)));
            String line = "";
            // 编译时异常,读取文件时会出现IO异常
            while(null!=(br.readLine())){
                System.out.println(line);
            }
            br.close();
        }
        public static void main(String[] args) {
            /***
             * 调用者负责处理编译时异常
             */
                try {
                    printFileContent("D:\\test.txt");
                } catch (FileNotFoundException e) {
                    // 反馈信息
                    System.err.println("文件不存在,请检查文件输入路径!");
                    e.printStackTrace();
                } catch (IOException e) {
                    // 反馈信息
                    System.err.println("文件发生读取异常!");
                    e.printStackTrace();
                }
        }
    
    }

    下面再看个UnCheckedException例子.

    package com.java.basic;
    
    public class UnCheckedExceptionDemo {
        public static void main(String[] args) {
            String str = "UnCheckedException";
            //char c = str.charAt(10);
            // 运行时异常,java.lang.StringIndexOutOfBoundsException
            // 不遵守约定,约定的index值是0-str.length之间
            char c1 = str.charAt(0);
            System.out.println(c1);
            char c2 = str.charAt(str.length()-1);
            System.out.println(c2);
            char c3 = str.charAt(-1);
            System.out.println(c3);
            //System.out.println(c);
        }
    }

    参考链接:http://www.artima.com/designtechniques/desexcept.html

    关于异常的使用就说到这里了,不合理的地方欢迎大家一起交流探讨!

  • 相关阅读:
    Pillar
    Minion配置文件
    Master配置文件
    Grains
    常见的散列函数
    数据结构散列表
    转载:数据结构 二项队列
    转载:数据结构 左式堆
    数据结构 d-堆
    二叉堆的简单介绍
  • 原文地址:https://www.cnblogs.com/heavenyes/p/3679436.html
Copyright © 2011-2022 走看看