zoukankan      html  css  js  c++  java
  • 【马克-to-win】学习笔记—— 第五章 异常Exception

    第五章 异常Exception

    【学习笔记】


    【参考:JDK中文(类 Exception)】

    java.lang.Object  

    【笔记】

     1.异常(Exception)的定义,意义和用法

    为了能优雅的处理异常情况(在出现异常情况后,程序不崩溃,还能继续优雅的运行), Sun公司设计了异常技术框架,
    马克-to-win:你把可能出现问题的语句放在try块儿中,真出了问题的话,系统会把问题的信息存放在一个异常类的对象中传入到catch块中,
    在catch块儿中,你可以专门根据错误信息作处理。

    ZMZDBC:出现异常如果不处理,异常之后的代码不会执行。

    异常发生后,输出结果:
    Exception in thread "main" java.lang.ArithmeticException: / by zero at Test.main(Test.java:4)

    ArithmeticException是异常类型,所以我们就该捕获ArithmeticException:
    catch(ArithmeticException e)
            {
                System.out.println(e);
            }

    ZMZDBC:并不是处理了所有可能发生的异常,程序就会一路运行下去,因为和Exception相对应的,还有Error,Error(错误)表示系统级的错误和程序不必处理的异常,是JRE(java运行环

    境)的内部错误或者硬件问题,比如,另外某一处地方的bug引起的内存溢出,内存资源不足等,OutOfMemoryError,对这类错误,程序基本无能为力。发生了Error,只能退出。

    2.多重捕获MultiCatch

    异常被引发时,每一个catch块儿被依次检查,第一个匹配异常类型的catch块儿被执行。马克-to-win:当一个catch块儿执行以后,其他的catch块儿被跳过,继续try/catch块以后的代码。

    像switch一样。
    即使已经捕获了很多异常,但是假如你还是少捕获了什么异常,赶上那个异常发作,你程序还是会崩溃的。那怎么办呀?我们可以求助于Exception类捕获所有的异常。
    catch多重异常时,子异常类必须在它们任何父类之前。如果子类在父类后面,子类将永远不会到达。(你想写也不行,系统会报编译错误。)

    public class Test {
        public static void main(String[] args) {
            int result;
            try {
                result = 12 /0; ←这里抛出“java.lang.ArithmeticException”异常
                System.out.println("try中完成finish"); ←因为上面的异常,这条语句不执行。
            }
            catch (NumberFormatException e) {
                System.out.println("输入参数必须为整数!"); ←未发生这个异常,因此不执行。
            }catch(Exception e){
                System.out.println("如有捕获不到的异常,我来! "+e); ←发生“java.lang.ArithmeticException”异常是“Exception”的子类,因此捕获成功,执行。
            }
            System.out.println("马克-to-win:优雅结束"); ←因为try{}块中发生的异常都被处理了,程序不会崩溃,因此正常执行。
        }
    }

    输出结果:
    如有捕获不到的异常,我来! java.lang.ArithmeticException: / by zero
    马克-to-win:优雅结束

    5.抛出throw关键字

    异常可以是JVM生成的,也可以是开发者主动生成的。
    例如,当程序运行到5/0的时候,java系统JVM会在后台new出一个除0异常实例,之后把这个实例传入catch块儿供开发者使用。
    而开发者也可以使用throw new Exception();主动new出一个异常实例,之后把这个实例传入catch块儿供开发者自己使用。
    马克-to-win:对于catch来讲,不管谁抛的,处理起来都一样。  

    if (mark_to_win == 0) throw new ArithmeticException("DIVIDE BY 0!!!!");

    输出结果:
    Exception in thread "main" java.lang.ArithmeticException: DIVIDE BY 0!!!!
        at Test.main(Test.java:5)

    6.Checked Exception(受检的异常)

    异常分为2类:
    1)RuntimeException和他的子类都是unchecked异常。其他的都是checked异常。
    2)Checked Exception(受检的异常)这类异常,编译器检查发现到它后会强令你catch它或throws它。根本就编译不过去(编译器会报错),必须包上一个try catch块,程序才能通过编

    译。
    3)Unchecked Exception(不受检的异常)这类异常,都是RuntimeException或者它的子类,编译器检查发现到它以后,什么都不管(编译器不会报错),也什么都不做,直接放行(当

    然导致的结果是如果开发者不处理程序就会崩溃)。

    ZMZDBC:RuntimeException更可怕,因为编译器不会提示开发者处理(catch它或throws它),如果发生了问题,直接崩溃。

    7.throws子句

    throws只是标记,并没处理,执行到那,系统还是会崩溃!ZMZDBC:之后的语句(包括return等都不会执行,直接跳到catch)。

    public class Test {
        void m1_mark_to_win() throws FileNotFoundException  { ←也可以抛出FileNotFoundException的父类IOException
            throw new FileNotFoundException(); ←FileNotFoundException是IOException 的子类
        }
    }

  • 相关阅读:
    变量与作用域
    安装node和grunt
    神奇的万维网
    大小写字母的转换
    跨域的方法
    选择器中含有空格的注意事项
    Tools
    jquery中innerWidth(),outerWidth(),outerWidth(true)和width()的区别
    网页中的foot底部定位问题
    CSS hack
  • 原文地址:https://www.cnblogs.com/dlsunf/p/9830238.html
Copyright © 2011-2022 走看看