【Java七天学习训练营】Day5

简介: 《Java开发手册》发布至今,下载超260万次,此次2020最新泰山版《Java开发手册》来了!七天打卡训练营由手册作者亲自出题,每天学一个知识点,写一个小作业,帮助你把新书读透!

泰山版Java开发手册

《Java开发手册》始于阿里内部规约,在全球 Java 开发者共同努力下,已成为业界普遍遵循的开发规范。今年是手册上线第四年,推出全新泰山版免费下载,涵盖三大更新亮点,直接下载一睹为快:泰山版Java开发手册

Java七天学习训练营Day5

Java七天学习训练营是由泰山版《Java开发手册》的作者亲自出题,每天学习一个知识点,写一份小作业,帮助你不仅是阅读,更能透彻理解泰山版《Java开发手册》的重要知识。

活动时间:5月15日截止提交完成打卡的同学名单

完成七天打卡挑战的少侠即有机会获得精美的阿里云开发者社区周边礼品,包含阿里云ET公仔、超大社区鼠标垫、卫衣、背包等等。

提示:每天需要从泰山版Java开发手册 进入,按照下方图示点击才算打卡成功哦!

配图.png

奖品说明:
同学们获取奖品的顺序,以阿里妹收到同学完成打卡后填写的表单序号为主。

第1名和第100、200、300等100的倍数打卡的同学送一个阿里云ET公仔(限量10个)
第10、20、30名等10的倍数打卡的同学送一张超大鼠标垫(限量50个)
第6名、第66名、第666名(以此类推)打卡同学送一个阿里云双肩包
第8名、第88名、第888名(以此类推)打卡的同学送一件阿里云定制卫衣
第1000名打卡的同学送上一个机械键盘!
除此之外,打卡完成编号是质数的同学可以获得一份笔记本+贴纸的纪念品(限量30份)

(部分奖品展示)

公仔.jpg

阿里云ET公仔

152.png

超大开发者社区鼠标垫

背包.JPG

阿里云定制双肩包

今日学习内容:异常处理

阅读前需了解:
1.每日学习的知识点都节选自泰山版《Java开发手册》,如想完整阅读电子书的所有内容,请到专题页下载。
2.根据约束力强弱,规约依次分为强制、推荐、参考三大类:
【强制】必须遵守。是不得不遵守的约定,违反本约定或将会引起严重的后果。
【推荐】尽量遵守。长期遵守这样的规定,有助于系统稳定性和合作效率的提升。
【参考】充分理解。技术意识的引导,是个人学习、团队沟通、项目合作的方向。

1. 【强制】Java 类库中定义的可以通过预检查方式规避的RuntimeException异常不应该通过catch 的方式来处理,比如:NullPointerException,IndexOutOfBoundsException等等。
说明:无法通过预检查的异常除外,比如,在解析字符串形式的数字时,可能数字格式错误,不得不通过catch NumberFormatException来实现。
正例:if (obj != null) {...}
反例:try { obj.method() } catch (NullPointerException e) {…}

2. 【强制】异常不要用来做流程控制,条件控制。
说明:异常设计的初衷是解决程序运行中的各种意外情况,且异常的处理效率比条件判断方式要低很多。

3. 【强制】catch时请分清稳定代码和非稳定代码,稳定代码指的是无论如何不会出错的代码。对于非稳定代码的catch尽可能进行区分异常类型,再做对应的异常处理。

说明:对大段代码进行try-catch,使程序无法根据不同的异常做出正确的应激反应,也不利于定位问题,这是一种不负责任的表现。

正例:用户注册的场景中,如果用户输入非法字符,或用户名称已存在,或输入密码过于简单,在程序上作出分门别类的判断,并提示给用户。

4. 【强制】捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容。

5. 【强制】事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务。

6. 【强制】finally块必须对资源对象、流对象进行关闭,有异常也要做try-catch。
说明:如果JDK7,可以使用try-with-resources方式。

7. 【强制】不要在finally块中使用return。
说明:try块中的return语句执行成功后,并不马上返回,而是继续执行finally块中的语句,如果此处存在return语句,则在此直接返回,无情丢弃掉try块中的返回点。
反例:

private int x = 0;
public int checkReturn() {
    try {
        // x等于1,此处不返回
        return ++x;
    } finally {
        // 返回的结果是2
        return ++x;
    }
}

8. 【强制】捕获异常与抛异常,必须是完全匹配,或者捕获异常是抛异常的父类。
说明:如果预期对方抛的是绣球,实际接到的是铅球,就会产生意外情况。

9. 【强制】在调用RPC、二方包、或动态生成类的相关方法时,捕捉异常必须使用Throwable类来进行拦截。

说明:通过反射机制来调用方法,如果找不到方法,抛出NoSuchMethodException。什么情况会抛出NoSuchMethodError呢?二方包在类冲突时,仲裁机制可能导致引入非预期的版本使类的方法签名不匹配,或者在字节码修改框架(比如:ASM)动态创建或修改类时,修改了相应的方法签名。这些情况,即使代码编译期是正确的,但在代码运行期时,会抛出NoSuchMethodError。

反例:某平台在退票费计算错误的故障中,由于fastvalidator引入了高版本的spring,导致运行到某段核心逻辑时,抛出NoSuchMethodError错误,catch的却是Exception,堆栈向上抛,影响到上层业务。这是一个非核心功能点影响到核心应用的典型反例。

10. 【推荐】方法的返回值可以为null,不强制返回空集合,或者空对象等,必须添加注释充分说明什么情况下会返回null值。

说明:本规约明确防止NPE是调用者的责任。即使被调用方法返回空集合或者空对象,对调用者来说,也并非高枕无忧,必须考虑到远程调用失败,运行时异常等场景返回null的情况。

今日作业

关于故障,以下说法正确的是哪项?其他说法错在哪里?

a)在日常运营中,无论什么原因导致我们服务中断、服务品质下降或用户服务体验下降的现象,称为故障,但不包括用户方环境或自身操作引起的问题

b)故障处理中一定要先优先止血

c)故障处理中处理人知道处理进展,没时间同步相关方可以不同步

d)故障actions只要完成就可以,是否验收不通过处理人不需要关心

同学们请把作业写在评论区里,如果出现了优秀作业,将再给该同学送出额外的礼品!明天的打卡页将公布答案。

上期答案

描述不正确的是c,TreeMap的key不允许为null,因为key要参与排序,当为null时,在底层调用compareTo方法进行比较排序时,就会报NullPointerException异常且TreeMap是非线程安全的。

点击下方图片回到Java开发手册专题页

按钮.jpg

阿里妹温馨提示:恭喜你完成了第五天的学习打卡!建议收藏专题页,每天记得上线打卡哦。只有连续七天坚持打卡,才有机会领取到奖品!

相关文章
|
1月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
79 3
|
1月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
88 43
Java学习十六—掌握注解:让编程更简单
|
18天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
1月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
33 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
26天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
1月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
47 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
1月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
33 2
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
25 3
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
31 2
|
1月前
|
存储 Java 编译器
【用Java学习数据结构系列】初识泛型
【用Java学习数据结构系列】初识泛型
20 2
下一篇
无影云桌面