【读后感】《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 每个对象 ...
随机推荐
- SpringBoot 将自制的Starter 发布到远程公服
上一篇文章:就是简单的介绍了如何自己制作一个starter ,由于上篇文章只是我个人的笔记,就是将其中重要的部分写出来了,少了其他的基础步骤,但是这个我自己就能看懂,也算不上是一篇好的博客,只能算是笔 ...
- python中读取mat文件
mat数据格式是Matlab的数据存储的标准格式 在python中可以使用scipy.io中的函数loadmat()读取mat文件. import scipy.io as scio path = 'e ...
- mysql idb文件过大
分开 保存,每个数据库有自己的 innodb_file_per_table=1
- FPGA浮点数定点数的处理
http://blog.chinaaet.com/justlxy/p/5100053166大佬博客,讲的非常有条理的 1,基础知识 (1)定点数的基础认知: 首先例如一个16位的数表示的定点数的范围是 ...
- css3 transform 变形属性详解
本文主要介绍了css3 属性transform的相关内容,针对CSS3变形.CSS3转换.CSS3旋转.CSS3缩放.扭曲和矩阵做了详细的讲解.希望对你有所帮助. 这个很简单,就跟border-rad ...
- 关于php自学
自己本人现在正在自学php有一段时间了,不知道现在的学习状态咋样,在我看来应该属于不算很糟糕,但有点糟糕的状态. 如果算学习自学php的话,现在断断续续应该是有5个月了,按理说是差不多可以做出独立项目 ...
- 记一笔MyBatis的坑
记一笔MyBatis的坑 1.sql查询concat()连接函数xml运行查询乱码 ) , ), char)'%') bll FROM fact_dkxx sq 由于连接的字符串中包含数字与百分比字符 ...
- WEB前端资源集(二)
在上一篇为大家整理出了一些资源网站,接下来给大家整理了一些开发中常用的工具. 开发工具篇 开发工具集 Sublime Text 3:SublimeText 3是一个代码编辑器,也是HTML和散文先进的 ...
- 赫夫曼解码(day17)
思路: 传入map(字节与对应字节出现的次数)和最后生成的要传送的字节.将他们先转换成对应的二进制字节,再转换成原来的字符串. 代码: 12345678910111213141516171819202 ...
- 使用fastai完成图像分类
by Wenqi Sun 1 min read Categories Deep Learning Tags Fastai CNN Application 1. 使用现有数据集进行分类 图像数据为Oxf ...