Exception-Error

news/2024/7/23 23:54:49 标签: java, 开发语言

知错好过不知

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

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

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

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

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

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

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

有这么一个故事:

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

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

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

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

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

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

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

一、结构

话不多说,上图:

在这里插入图片描述

二、先聊Exception

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

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

2.1 运行时异常

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

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

比如:

java">// 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 ,程序依然可以编译。

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

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

java">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,在一些数据量比较大的时候我们进行内存缓存就可能出现这种情况。

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

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

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

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


http://www.niftyadmin.cn/n/1940.html

相关文章

【Vue】环境搭建

Vue 简介&#xff1a; 一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的工具链以…

隔离出来的“陋室铭”

被隔离了 日常锻炼身体就是去公司旁边的酒店游泳&#xff0c;结果酒店里除了小阳人&#xff0c;我就喜提次密称号&#xff0c;7天隔离走起&#xff1b;又因为不想耽误家里孩子上学&#xff0c;老人外出&#xff0c;就选择了单独隔离&#xff0c;结果就拉到了单独的隔离点&…

Android - UI开发指南

文章目录调试工具查看view的边界和margin、padding查看布局属性层次和控件的属性布局开发布局命名空间 app、android、toolsConstraintLayout调试工具 查看view的边界和margin、padding 开发者选项 > 显示布局边界 开启这个选项后界面上每一个空间周围会多出来红色和蓝色的…

【Linux学习】基础IO

目录前言一、C语言文件IO1. C语言文件接口以及打开方式2. 对当前路径的理解3. 默认打开的三个流二、 系统文件IO1. 系统接口openwritereadclose系统接口和库函数2. 文件描述符及其分配规则文件描述符文件描述符分配原则3. 重定向及dup2系统调用重定向标准输出和标准错误的区别d…

基于51单片机的信号发生器设计

目 录 引言... 1 1 课题背景意义及研究内容... 1 1.1 课题背景及研究意义... 1 1.2 课题研究内容... 2 2 设计方案选择... 2 2.1 系统控制芯片选择... 2 2.2 信号发生方式选择... 2 2.3 系统整体设计方案... 2 3 系统硬件设计... 3 3.1 单片机最小系统... 3 3.1.1单片机S…

C++11:新特性(11-20)

十一&#xff1a;委托构造函数 C11中&#xff0c;委托构造函数使用它所属类的其他构造函数执行它自己的初始化过程&#xff0c;或这说自己的一些职责委托给了其他构造函数。 格式为&#xff1a; class data { public://构造函数data(int a,int b,int c):_a(a),_b(b),_c(c){}…

linux基本操作之gvim

文章目录 一、GVIM介绍及安装二、配置GVIM界面2.1、简单.vimrc配置使用2.2、功能齐全的.vimrc及插件配置2.3、gvim常用窗口编辑操作2.4、gvim三种工作模式三、gvim常用命令(均在命令模式下才可用)3.1、常用的光标移动快捷键3.2、删除操作(delete)以`d`为关键字3.3、改变和替…

对接抖音开发之售后消息实时通知订单部分退款

目录 前言 一、抖音开发中的售后消息 二、抖音运营反馈的业务需求分析 三、整体的业务开发思路 四、售后消息的代码开发 1.售后消息的使用 2.实时保存抖音平台过来的售后消息 3.具体的订单业务处理 总结 前言 这里主要是介绍一下抖音开放平台的这个售后消息的实际使用…