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));

很多,也包括我们自定义的一些异常。 我们不用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));
        }
    }
}

2.2 被检查异常

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

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

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

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

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

三、再聊Error

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

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

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

比如VirtualMachineError、OutOfMemoryError、ThreadDeath

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值