【读后感】《Java编程思想》~ 异常
【读后感】《Java编程思想》~异常
终于拿出压箱底的那本《Java编程思想》。这本书我年轻的时候就买了,但是翻过几页后就放弃了。没想到这两天翻了一下,真的有收获。
看了一下第12章异常,有两个地方令我感悟很深。
使用嵌套的try子句
public static void main(String[] args) {
try{
InputFile in = new InputFile("Test01.java");
try{
String s;
int i = 1;
while (Objects.nonNull(s=in.getLine())){
System.out.println(s);
//todo
}
}catch (Exception e){
System.out.println("catch exception in main");
e.printStackTrace();
}finally {
in.dispose();
}
}catch (Exception e){
System.out.println("construct InputFile error");
}
}
}
** 处理构造可能失败,并且需要清理的对象 **,每个构造都必须包裹在自己的try-finally语句块,并且每个对象构造器之后都必须跟随一个try-finally语句块,确保自己能够被正确地清理。
上面这个就是我们工作中处理网络连接、redis连接、IO文件连接的基本原型,看似日常,但是需要谨记(对我而言尤其是,毕竟有过redis连接忘记释放耗尽连接池导致用户登录不进来的惨痛经历)
"被检查的异常"是否合理
这个是在第四版的12.12 其他可选方式 这章讲述的。印象很深,因为我从来没有思考过,Java异常设计的是否合理,没有质疑过它的正确性。但是作者却认为,"被检查的异常"强制程序员在没有做好准备的情况下被迫加上catch语句,这个导致"吞食则有害"的问题。就是说我们经常在catch中不处理异常或者不清楚如何处理,错误地处理了异常,而不是将异常抛出来。
这个问题我在项目中的代码也经常看到,程序返回的结果不是我们想要的,但是却没有找到异常日志,复查代码的时候才发现,有catch语句"吞食"了异常。
虽然代码编程规范告诉我们要抛出异常,但是为什么一定要这么做?期待程序员的自律,不如不给"吞食"的机会。
异常设计的初衷,我想就如作者所说,是为了跟方便地编程,写C的时候,你不知道哪里出了问题,只能借助调试器一步步地debug,但是Java的异常机制可以让我们放心地编程,因为异常机制会帮我们查找出出错的位置。但是"被检查的异常"有点违背这个初衷,似乎给了一条隐藏残缺的捷径。
千万不要吞食异常,抛出来
观点不一定正确,毕竟人的认知是不断改变的,欢迎探讨和指正。
【读后感】《Java编程思想》~ 异常的更多相关文章
- java编程思想-异常
DynamicFields类的setField方法里面的getField方法抛出的异常NoSuchFieldException 为什么是throw new RuntimeException(e);
- Java编程思想——异常
1.异常对象的方法printStackTrace 作用是打印Throwable和Throwable的调用栈轨迹. 2.finally 不管抛没抛出异常,都会执行finally中的代码.前提是出异常的代 ...
- 异常笔记--java编程思想
开一个新的系列,主要记一些琐碎的重要的知识点,把书读薄才是目的...特点: 代码少,概念多... 1. 基本概念 异常是在当前环境下无法获得必要的信息来解决这个问题,所以就需要从当前环境跳出,就是抛出 ...
- 《Java编程思想》学习笔记(二)——类加载及执行顺序
<Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...
- Java编程思想重点笔记(Java开发必看)
Java编程思想重点笔记(Java开发必看) Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...
- Java编程思想——初始化与清理
PS:最近一直忙于项目开发..所以一直没有写博客..趁着空闲期间来一发.. 学习内容: 1.初始化 2.清理 1.初始化 虽然自己的Java基础还是比较良好的..但是在解读编程思想的时候还是发现了 ...
- java编程思想
Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理 ...
- Java编程思想(11~17)
[注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第十一章 持有对象 11.1 泛型和类型安全的容器>eg: List<St ...
- Java编程思想总结笔记The first chapter
总觉得书中太啰嗦,看完总结后方便日后回忆,本想偷懒网上找别人的总结,无奈找不到好的,只好自食其力,尽量总结得最好. 第一章 对象导论 看到对象导论觉得这本书 目录: 1.1 抽象过程1.2 每个对象 ...
随机推荐
- 关于Apache Commons的简介
Apache Commons是对JDK的拓展,包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.官网网址:http://commons.apache.org Commons Bea ...
- 国内外主流的三维GIS软件
我国GIS经过三十多年的发展,理论和技术日趋成熟,在传统二维GIS已不能满足应用需求的情况下,三维GIS应运而生,并成为GIS的重要发展方向之一.上世纪八十年代末以来,空间信息三维可视化技术成为业界研 ...
- 前端-jQuery-长期维护
############### jQuery简介 ################ jQuery这是非常重要的,在django项目中大量的前端都是使用jQuery进行操作 为什么要学习 ...
- LeetCode Day 10
LeetCode0020 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序 ...
- python中的reduce函数
python中的reduce python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是 ...
- selenium ide几个版本和对应的firefox版本
最近安装selenium ide折腾了好久,可能是目前还不太熟悉自动化脚本录制的一些知识. 通过最新版firefox59安装的selenium ide 3.0.2录制的脚本不能导出.于是下载了低版本的 ...
- JQuery中易混淆的概念
append(): 向每个匹配的元素内部追加内容. <p>I would like to say: </p> $("p").append("< ...
- 基于Dockerfile制作tomcat镜像
Docker 概述: 在前面的例子中,我们从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一种文件或脚本,我们把想执行的操 ...
- __filename意思
__filename 表示当前正在执行的脚本的文件名.它将输出文件所在位置的绝对路径,且和命令行参数所指定的文件名不一定相同. 如果在模块中,返回的值是模块文件的路径.
- 环境安装文档(for Ubuntu)
这个文档的目标是:各位小伙伴通过这个文档,可以在一台全新的 Ubuntu 电脑上搭建平常开发使用的环境,主要包含 Node.js, git 和 编辑器部分. 这是针对 Ubuntu 系统的安装文档,W ...