• 04异常异常


    0、异常处理机制

    0.1、java中异常的作用是:增强程序健壮性。
    0.2、java中异常以类和对象的形式存在。

    1、java的异常处理机制

    1.1、异常在java中以类和对象的形式存在。那么异常的继承结构是怎样的?
    我们可以使用UML图来描述一下继承结构。
    画UML图有很多工具,例如:Rational Rose(收费的)、starUML等....
    Object
    Object下有Throwable(可抛出的)
    Throwable下有两个分支:Error(不可处理,直接退出JVM)和Exception(可处理的)
    Exception下有两个分支:
    Exception的直接子类:编译时异常(要求程序员在编写程序阶段必须预先对这些异常进行处理,如果不处理编译器报错,因此得名编译时异常。)。
    RuntimeException:运行时异常。(在编写程序阶段程序员可以预先处理,也可以不管,都行。)

    1.2、编译时异常和运行时异常,都是发生在运行阶段。编译阶段异常是不会发生的。
    编译时异常因为什么而得名?
    因为编译时异常必须在编译(编写)阶段预先处理,如果不处理编译器报错,因此得名。
    所有异常都是在运行阶段发生的。因为只有程序运行阶段才可以new对象。
    因为异常的发生就是new异常对象。

    1.3、编译时异常和运行时异常的区别?

    编译时异常一般发生的概率比较高。
    举个例子:
    你看到外面下雨了,倾盆大雨的。
    你出门之前会预料到:如果不打伞,我可能会生病(生病是一种异常)。
    而且这个异常发生的概率很高,所以我们出门之前要拿一把伞。
    “拿一把伞”就是对“生病异常”发生之前的一种处理方式。

    对于一些发生概率较高的异常,需要在运行之前对其进行预处理。

    运行时异常一般发生的概率比较低。
    举个例子:
    小明走在大街上,可能会被天上的飞机轮子砸到。
    被飞机轮子砸到也算一种异常。
    但是这种异常发生概率较低。
    在出门之前你没必要提前对这种发生概率较低的异常进行预处理。
    如果你预处理这种异常,你将活的很累。

    假设你在出门之前,你把能够发生的异常都预先处理,你这个人会更加
    的安全,但是你这个人活的很累。

    假设java中没有对异常进行划分,没有分为:编译时异常和运行时异常,
    所有的异常都需要在编写程序阶段对其进行预处理,将是怎样的效果呢?
    首先,如果这样的话,程序肯定是绝对的安全的。
    但是程序员编写程序太累,代码到处都是处理异常
    的代码。

    1.4、编译时异常还有其他名字:
    受检异常:CheckedException
    受控异常

    1.5、运行时异常还有其它名字:
    未受检异常:UnCheckedException
    非受控异常

    1.6、再次强调:所有异常都是发生在运行阶段的。

    1.7、Java语言中对异常的处理包括两种方式:

    第一种方式:在方法声明的位置上,使用throws关键字,抛给上一级。
    谁调用我,我就抛给谁。抛给上一级。

    第二种方式:使用try..catch语句进行异常的捕捉。
    这件事发生了,谁也不知道,因为我给抓住了。

    举个例子:
    我是某集团的一个销售员,因为我的失误,导致公司损失了1000元,
    “损失1000元”这可以看做是一个异常发生了。我有两种处理方式,
    第一种方式:我把这件事告诉我的领导【异常上抛】
    第二种方式:我自己掏腰包把这个钱补上。【异常的捕捉】

    张三 --> 李四 ---> 王五 --> CEO

    思考:
    异常发生之后,如果我选择了上抛,抛给了我的调用者,调用者需要
    对这个异常继续处理,那么调用者处理这个异常同样有两种处理方式。

    1.8、注意:Java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续
    向上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果。终止java程序的执行。

  • 相关阅读:
    python模块总结(一)命令行解析模块argparse
    TCP(一)三次握手和四次挥手
    容器网络(四)vxlan
    容器网络(三)容器间通信
    kvm虚拟化(二)网络虚拟化
    KVM虚拟化(一)创建虚拟机
    数字操作 —— 9_ 回文数
    数字操作 —— 8_字符串转换整数(atoi)
    数字操作 —— 7_整数反转
    字符串操作 —— 763_划分字母区间
  • 原文地址:https://www.cnblogs.com/xiaoming521/p/15840879.html
Copyright © 2020-2023  润新知