• Exception-Error


    知错好过不知

    刷抖音的时候看到这么一段话:

    一个人的最低境界是从不反思,就是我做错了什么事儿,不知道!我总觉得是别人的错,我从不觉得是自己错。

    然后还有一种比这个境界高一点的境界,我知道我错了,但是我不承认,我知道是我做的不对,我自己内心别扭,你说我就不行。

    还有一种是我知道自己错了,我也承认,但是我不愿意跟你们提,不愿意跟你们说。

    最高级的境界是,我知道我自己错了,我告诉大家,这个叫做自我批判的外显化。

    有的时候很像去学心理学,很想去学哲学,发现这些人,能把世界上千千万万的不同分门别类。

    跟数学一样,有固定的公式,通过固定的行为可以推导出固定的结果。

    有这么一个故事:

    话说那么一家,家中夫妻俩,生了个男娃娃,取名叫东宫目目,目目长大后进到经过自己的努力,到了一家公司做领导,按照常理来说都会有新官上任三把火,于是目目决定摒弃团队现有管理模式,准备开创一个自己认可的(虽然他不知道怎么做,但是还是要做)模式。刚开始有人给他提意见,说你这样做可能不是很好,按照我们之前规划的来,可能效果更好。目目说,你之前规划的有什么好处?为什么用之前规划的路线?我的计划才是最好的,听我的就行了。这个时候东宫目目就处在我们上边说的第一层,错而不自知

    过了将近一个月,目目可能发现他好像有点儿问题,因为按照他的制度,团队没有什么进步,反而好像有了退步,于是他悄悄的把一些政策都修改为之前的老政策,但是他没有跟任何人说过,只是悄悄修改。这个时候他处在我们上边说的第二层,知错而不承认

    时间很快,又过了一个月,自从东宫目目把大部分政策修改成原样之后,大家的积极性很高,团队气氛、项目进度等方面都得到了提升,一天开站会的时候,有一个同事叫钮钴禄西西,他说,我发现我们的政策好像又按照之前的来了,东宫目目说,是的,我刚来的时候可能不了解,所以一些决定可能不是很合适,那我们以后一起努力吧,好好干。目目一笔带过,并不想别人再提起政策的事儿。这个时候他处在我们上边说的第三层,认错而不愿提

    时光飞逝,来到了年底,经过半年的相处,目目发现,他手下的这群人都是干实事儿的人,项目进度也超预期完成,于是在年底团队小聚的时候,目目发话了,我刚来的时候,有点儿莽撞了,没有了解咱们公司的现状,就进行大肆改革,搞了一些不切实际的政策,当时肯定有顶撞到大家的地方,我在这给大家道个歉,说话间目目举起酒杯,一饮而尽。目目说道,以后欢迎大家给我指出问题,我肯定第一时间与大家讨论解决。这个时候他已经处在我们所说的第四层,知错,认错,也改错。

    你工作中的领导能到那一层呢? 欢迎留言讨论。

    身为程序员,一说到错误,我不免想到了一个知识点,Error、Exception

    作为Java开发人员肯定很熟悉这两个词儿,也很不喜欢这两个词儿。听到这俩词儿的感觉就好比带着妹子去购物,一刷卡,提示余额不足。

    一、结构

    话不多说,上图:

    在这里插入图片描述

    二、先聊Exception

    相比Error我们代码里常用的还是Exception以及其子子孙孙(子类、子类的子类)们。

    Exception主要分为两大类,一类是运行时异常,一类是被检查异常。

    2.1 运行时异常

    运行时异常,顾名思义,就是运行时的异常。嗯?说了但好像没完全说。

    意思就是编译器不会检查他,当程序可能出现异常时,倘若没有try-catch或throws,也是可以编译通过的。

    比如:

    // java.lang.ArrayStoreException: java.lang.String
    Object[] arr =new Integer[1];
    arr[0] = "A";
    // java.lang.ClassCastException: java.lang.Object cannot be cast to test.EE
    Object obj = new Object();
    EE e = (EE)obj;
    // java.lang.NullPointerException
    Object o = null;
    System.out.println(o.toString());
    // java.lang.ArithmeticException: / by zero
    int i=0;
    int j = 10 / i;
    // java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    List<String> list = new ArrayList<>();
    System.out.println(list.get(0));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    很多,也包括我们自定义的一些异常。 我们不用try-catch,也不throws ,程序依然可以编译。

    但是运行的时候就会报错。

    这个就涉及到我们的编码规范了。我们一般在使用前都需要进行一些非法判断

    package test;
    
    import java.io.FileNotFoundException;
    import java.nio.Buffer;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author 木子的昼夜编程
     */
    public class EE {
        public static void main(String[] args) {
            // java.lang.ArrayStoreException: java.lang.String
            Object[] arr =new Integer[1];
            if (arr instanceof String[]) {
                arr[0] = "A";
            }
            // java.lang.ClassCastException: java.lang.Object cannot be cast to test.EE
            Object obj = new Object();
            if (obj instanceof EE) {
                EE e = (EE)obj;
            }
            // java.lang.NullPointerException
            Object o = null;
            if (o != null) {
                System.out.println(o.toString());
            }
            // java.lang.ArithmeticException: / by zero
            int i=0;
            if (i != 0) {
                int j = 10 / i;
            }
            // java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
            List<String> list = new ArrayList<>();
            if (list != null && list.size() > 0) {
                System.out.println(list.get(0));
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    2.2 被检查异常

    除了“运行时异常”其他的Exception子子孙孙都是被检查异常。

    顾名思义,就是Java编译器会检查它,这类异常如果不try-catch或者声明throws抛出,编译器不答应。是没有办法进行编译的,编译不通过,很难受。

    我们经常遇到的应该很少了,比如

    在这里插入图片描述
    在这里插入图片描述

    如果我们没有捕获或者抛出的话,是不能编译通过的。在工作中,这类代码是不能提交到代码仓库的。要不然容易挨骂、挨罚、甚至挨打。

    三、再聊Error

    Error与运行时异常一样,编译器也不会对错误进行检查。

    当资源不足、约束失败、或者是其他程序无法继续运行时的条件发生时,就产生错误。

    程序本身无法修复这种错误。

    比如VirtualMachineError、OutOfMemoryError、ThreadDeath

    最常见的应该是OutOfMemoryError,在一些数据量比较大的时候我们进行内存缓存就可能出现这种情况。

    这种错误一旦出现,那是致命的,轻则导致系统卡顿,重则导致系统重启,更或者是导致服务器瘫痪。

    我们一生中会犯很多错,大大小小,有的错能自己意识到,如果你意识到了,你就主动承认,积极改正。

    如果你没意识到,这才是最可怕的,这时候我们只能通过提升自己认知,让自己认识到错误。

    或者有时候,会有一些好心人,顶着冲撞你的风险,给你提醒,这时候,你最好不要有敌意,他可能能变成你的朋友。

  • 相关阅读:
    C语言学习概览(四)
    【Java集合类面试二十九】、说一说HashSet的底层结构
    Springboot学生选课系统的设计与实现毕业设计源码291510
    QoS流量整形
    命令行中引导用户指定选择文档
    分析了60款链游,发现40%的玩家都是机器人
    Java本地远程断点调试(实战记录)
    好用到飞起的新项目「GitHub 热点速览」
    Android 实战项目分享(一)用Android Studio绘制贝塞尔曲线的艺术之旅
    DHCP基础
  • 原文地址:https://blog.csdn.net/qq_36291682/article/details/127592985