【读后感】《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 每个对象 ...
随机推荐
- SPI以及IIC的verilog实现以及两者之间的对比
一.SPI是一种常用的串行通信接口,与UART不同的地方在于.SPI可以同时挂多个从机,但是UART只能点对点的传输数据,此外SPI有四条线实现数据的传输,而UART采用的是2条实现串行数据的传输 1 ...
- spring cache问题记录
1.是否可以设置过期时间 timeout ttl 对于单个key设置过期时间 需要自定义CacheManager, 见3中的问题 spring boot 1版本可以重写RedisCacheManage ...
- 瑞星:以虚拟化安全“Hold住”企业用户
自从云计算的概念诞生的哪一天起,就吸引了无数人的目光.自从2006年开始,云计算经过了雾里看花的朦胧.众说纷纭的迷茫,到现在各类应用与服务呈现出了百花齐放的姿态,引领着信息科技迈入了新纪元,而服务器虚 ...
- HDU1166 敌兵布阵 [线段树模板]
题意:在序列中修改单点和查询区间和 #include<iostream> #include<cstdio> #include<cstring> #define ls ...
- Java Class Loader Retrospect
- Java IO: 字符流的Piped和CharArray
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍管道与字符数组相关的reader和writer,主要涉及PipedReader.Pip ...
- react项目中引入了redux后js控制路由跳转方案
如果你的项目中并没有用到redux,那本文你可以忽略 问题引入 纯粹的单页面react应用中,通过this.props.history.push('/list')就可以进行路由跳转,但是加上了redu ...
- SpringBoot webjars 映射
添加静态资源映射 @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.a ...
- win10安装3DMAX失败,怎么强力卸载删除注册表并重新安装
一些搞设计的朋友在win10系统下安装3DMAX失败或提示已安装,也有时候想重新安装3DMAX的时候会出现本电脑windows系统已安装3DMAX,你要是不留意直接安装3DMAX,只会安装3DMAX的 ...
- 用artifactory搭建maven2内部服务器
访问http://www.jfrog.org/sites/jfrog/index.html 下载最新的zip包(内置jetty) 下载和解压artifactory.目录结构如下: 这些目录是: bac ...