【读后感】《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编程思想》~ 异常的更多相关文章

  1. java编程思想-异常

    DynamicFields类的setField方法里面的getField方法抛出的异常NoSuchFieldException 为什么是throw new RuntimeException(e);

  2. Java编程思想——异常

    1.异常对象的方法printStackTrace 作用是打印Throwable和Throwable的调用栈轨迹. 2.finally 不管抛没抛出异常,都会执行finally中的代码.前提是出异常的代 ...

  3. 异常笔记--java编程思想

    开一个新的系列,主要记一些琐碎的重要的知识点,把书读薄才是目的...特点: 代码少,概念多... 1. 基本概念 异常是在当前环境下无法获得必要的信息来解决这个问题,所以就需要从当前环境跳出,就是抛出 ...

  4. 《Java编程思想》学习笔记(二)——类加载及执行顺序

    <Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...

  5. Java编程思想重点笔记(Java开发必看)

    Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...

  6. Java编程思想——初始化与清理

    PS:最近一直忙于项目开发..所以一直没有写博客..趁着空闲期间来一发.. 学习内容: 1.初始化 2.清理 1.初始化   虽然自己的Java基础还是比较良好的..但是在解读编程思想的时候还是发现了 ...

  7. java编程思想

    Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理 ...

  8. Java编程思想(11~17)

    [注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第十一章 持有对象 11.1 泛型和类型安全的容器>eg: List<St ...

  9. Java编程思想总结笔记The first chapter

    总觉得书中太啰嗦,看完总结后方便日后回忆,本想偷懒网上找别人的总结,无奈找不到好的,只好自食其力,尽量总结得最好. 第一章  对象导论 看到对象导论觉得这本书 目录: 1.1 抽象过程1.2 每个对象 ...

随机推荐

  1. 使用lambda表达式优雅你的事务代码

    我们在实现业务逻辑时,经常会有这种需求: 1.在当前事务A中开启新事务B,事务B中发生异常不可以回滚A,事务B成功执行后返回事务B的返回值: 2.在当前事务A中开启新事务B,事务B中发生异常要求回滚A ...

  2. 项目中docker swarm实践

    docker swarm 集群服务通信 前置要求 服务需要在同一个docker swarm集群中 服务需要处于同一个overlay网络上 服务需要暴露容器端口 有2个以上服务名不同的服务 服务部署流程 ...

  3. Gas Station(Medium)

    1.在做pat的to fill or not to fill的时候想起同样是加油站的题目,于是翻出来复习一下 2.关键在于理解潜在的条件.假设油量为tank,如果到了当前站i,tank<0,即不 ...

  4. ospf实验

    以上是实验要求和实验拓扑 R1到R5的ip自己配置了 1. #int loopback 0 #IP add 1.1.1.1 24 2.基本命令R5例: #ospf 1 router-id 5.5.5. ...

  5. winform窗体中webbrowser如何屏蔽脚本错误弹窗

    在构造函数中加入: webBrowser.ScriptErrorsSuppressed = true;

  6. Nginx笔记总结十四: nginx反向代理,用内网域名转发

    user www www; worker_processes ; error_log logs/error.log; pid logs/nginx.pid; worker_rlimit_nofile ...

  7. caffe之android移植

    获取Android手机CPU类型 ARM.ARMV7.NEON:http://blog.csdn.net/mengweiqi33/article/details/22796619 android nd ...

  8. dTree动态生成树(后台处理,简化前台操作)

    dTree是个很方便在页面生成树的 js 控件,如果你下载了,我猜里在几分钟之内便能在页面上显示出一颗树来. 它本身给的例子是通过一些静态数据构造树,下面我说一种通过查询的数据动态构造树的方法. 例子 ...

  9. Python---14面向对象高级编程(__slots__&@property)

    一.使用__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: class Stude ...

  10. docker实践-安装wordpress

    很多人都有搭建wordpress的经历,可能被某些环境的配置搞得焦头乱耳的,这里使用docker,可以很轻松的进行wordpress的搭建工作. 安装 Docker sudo apt-get inst ...