一篇学习JAVA好文,写得比较幽默。

7-4 二叉树的遍历!(简单) (25 分) 在开头跟大家分享的时候我就说,面试我是没有做好准备的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准备好了或许可以拿个40k,没做准备只有30k+,你们懂那种感觉吗)如何准备面试?1、前期铺垫(技术沉积)程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求主要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。 阅读详情
java的try-finally给我们提供了一个“保证某个动作必然执行”的机会。

一个try-finally结构,只要try块开始执行了,finally块里面的代码保证执行一次并且只有一次。
打个比方,就象你上厕所,只要你一旦开始拉了,我们保证无论如何,是拉稀了也好,放屁了也罢,最终你肯定是擦了屁股走出卫生间。

应用try-finally,我们可以在异常满天飞的程序里保证我们的关键资源被按时正确清理。一个最常见的应用就是jdbc的Connection, Statement, ResultSet等。

但是,我最近惊奇地发现,不知道怎么正确清理资源的人大有人在,即使是一些java老手。

看一个例子先:


代码
void f(){
Connection conn = ...;
Statement stmt = conn.createStatement();
ResultSet rset = ...;
...
}

典型的jdbc程序。但是也是典型的光着屁股,其臭如兰地走出厕所的典范。哎,你擦屁股了吗?
有的哥们振振有辞:我不用管,我的jdbc driver/我的应用服务器/garbage collector会处理的。
这是典型的糊涂蛋逻辑。没有close(),jdbc driver, 应用服务器怎么知道你是拉完了,还是光着屁股出去接个电话先?难不成这driver都智能地会算命了?
garbage collector倒确实管得了。不过,garbage collector不一定运行啊。你要是有10G得内存,要是你的程序就用了10M,garbage collector说不定就一直睡大觉。而且,就算它管,也许等你光着屁股上班被警察抓起来之后才匆匆赶到,你等的起吗?


好,有人说,那我擦,我擦,我擦擦擦。行了吧?


代码
void f(){
Connection conn = ...;
Statement stmt = conn.createStatement();
ResultSet rset = ...;
rset.close();
conn.close();
...
}


呵呵。我的傻哥们,你只擦了靠近后背的那三公分,剩下的嘛,别人看不见你就乐得省土块儿了是么?

按jdbc标准,ResultSet, Statement, Connection都要close(),也许有的driver会在Connection关闭的时候同时正确清理ResultSet, Statement,但是,并没有一条规定让所有的driver都这么做。
另外,也许你的Connection是从一个池里面来的,它只是回到池中去,如果你不关闭Statement, ResultSet,下一个拿到这个Connection的人也许就倒霉了!
做事要有始有终,既然开始擦了,就擦干净点儿,行不?(那个,谁谁谁,借我个防毒面具先!)

ok,有个讲卫生的小傻子这样擦:


代码
void f(){
Connection conn = ...;
Statement stmt = conn.createStatement();
ResultSet rset = ...;
rset.close();
stmt.close();
conn.close();
...
}


然后洋洋得意地说:我是好孩子,我天天擦屁屁。

是啊,多听话的孩子呀。可惜,某天,这孩子正坐在马桶上美着呢,妈妈喊了嗓子:二傻子,吃饭啦。
哦!吃饭。二傻子裤子都没提就窜出来了,熏得妈妈一个跟头。

什么问题,傻子做事一根筋,不能打扰,一旦有异常情况出现,屁股就忘了擦了。

所以,我这里郑重提醒大家,请用"try-finally"!它独有凹槽,防止侧漏...(糟了,串台了)

是啊,java老手们都不是傻子,都知道用try-finally的,可是,别美,你现在就保不齐擦没擦屁股呢!

常见擦法:


代码
void f(){
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
try{
conn = ...;
stmt = ...;
rset = ...;
...
}
finally{
if(rset!=null)rset.close();
if(stmt!=null)stmt.close();
if(conn!=null)conn.close();

}
}


嗯。怎么说呢。挺聪明的。都学会if(xxx!=null)这种传说中条件判断的上古绝学了。
可惜,你屁股大,一张纸不够,你用了第一张纸,满意地看着它圆满地完成了金灿灿的任务,再用第二张,靠,只太薄,破了,一手金灿灿地,象带了个金戒指。你大怒,起,绝尘而去。于是也忘了第三张纸,
哥们儿,close()是可以出异常的,你rset关了,stmt.close()出现了异常,但是conn就不管了?

近日有位室外高人,据说是鬼谷子高徒,鉴于怜我世人,不擦屁股的实多的高尚情操,亲手赚写一本绝世擦功秘籍,其文美,其意高,除了擦不干净之外,真可以说是称霸擦林。


代码
void close(Connection conn){
try{
if(conn!=null) conn.close();
}
catch(Exception e){
e.printStackTrace();
}
}
void close(ResultSet rset){
...
}
void close(Statement rset){
...
}
void f(){
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
try{
conn = ...;
stmt = ...;
rset = ...;
...
}
finally{
close(rset);
close(stmt);
close(conn);

}
}


哈,你们不能纸擦破了就不接着擦啊,甚至大而化之,不能擦股用具有了问题就半途而废呀!

具信,该高人以此法擦遍天下凡十数载,未有擦而无功者。

可惜,高人却忽视了,除了纸会出故障,甚至大而化之,一切擦具(如土块儿,木条儿,手指)都可能出现故障,还有别的地方也会出故障地!
除了Exception,还有Error啊,我的高人!如果close(rset)抛了一个Error,你的close(stmt), close(conn)不都歇菜了?

后来,高人在《绝世武功补遗》里面解释说:Error代表不可恢复错误,说明整个排泄大业都受阻了,所以根本不应该试图对这种情况做任何处理,你也处理不了(自然也隐含此时你也根本无法擦屁股了的论断)。任何试图在这种情况下仍然固执擦屁股的做法都是倒行逆施,螳臂当车,必然被历史的车轮所撵碎。

此书一处,天下辟易。其革命性之深远,难以估量。具有关方面评论,Sun这个公共厕所的try-finally这个工具的设定本身就是不合理的,应该被历史车轮撵碎的,因为try-finally居然试图在出现Error的时候去做一些事情!是可忍,孰不可忍?
可以预见,try-finally将被sun彻底废弃,并且向广大公众做公开道歉以检讨多年来的欺骗造成的恶劣影响。
另外,公厕的构造也受到质疑,因为一旦有一个拉客在擦的时候某一步无可挽回地失败(比如,太紧张,手一抖,纸掉到了坑里,又死活伸手捞不着),那么他就大摇大摆不再继续擦,而如果碰巧此人刚吃了萝卜,就会把整个厕所里的其它拉客都熏得无法继续。(想想一个app server吧。你一个程序歇菜,乐得请病假不擦了,别人也跟着倒霉?)

嘿嘿,那么,你擦了吗?你肯定你擦了?擦干净了?

幸好,我们翻遍上古秘籍,最终在北京山顶洞人的失传宝典《呼呼,擦!》中发现了一个据称绝对干净的擦法,那就是------------

一下一下擦!

具体操作办法如下:


代码
void f(){
final Connection conn = ...;
try{
final Statement stmt = ...;
try{
final ResultSet rset = ...;
try{
...
}
finally{rset.close();}
}
finally{stmt.close();}
}
finally{conn.close();}
}


其诀窍就是,每建立一个需要清理的资源,就用一个try-finally来保证它可以被清理掉。

如此,任何时候,你都是屁股干干静静地离开卫生间。

哪。好多圣人门徒跟我说:这样一下一下擦,姿势非常不雅观(看看那嵌套的try块吧),有违古礼。我们反对!

靠,你说孔丑儿古还是山顶洞人古??
屁股还泛着味儿呢,还拽什么“雅”?

而且,要是死要面子,也可以拉个帘子,擦的时候别让人看见嘛。比如:


代码
interface ResultListener{
void call(ResultSet rset);
}
class SqlReader{
void read(ResultListener l){
final Connection conn = ...;
try{
final Statement stmt = ...;
try{
final ResultSet rset = ...;
try{
l.call(rset);
}
finally{rset.close();}
}
finally{stmt.close();}
}
finally{conn.close();}
}
}


这一下一下擦的动作都藏在SqlReader这个帘子里,你直接在ResultListener里面拉不就行了?

那位高人说了,这太复杂,就为了擦个屁股不值。

这个嘛,值不值的另说,你那个简单,就是简简单单地擦不干净屁股。要不您干脆别擦得了,更简单呢还。反正您出门儿就愣说擦的是Chanel香水儿就是了。有啥比瞪眼儿说白话儿简单?

对了, 我还忘了一个条款:
就是擦屁股的时候按顺序擦。谁后进厕所的,要让人家先出去。

“什么狗屁规则?“那位问了。

这个这个--,啊,你猜猜~~~?

嗯,对了,是这样的,上厕所都不着急,姗姗来迟,上课更不着急,更喜欢迟到了,对不对?而谁上课天天迟到早退还不担心毕业?当然是了,是不?
人家都了,你还不让人家先出去?活腻味了你?(此处尾音要拉长,而且向上拐)

反正啊,具体说,ResultSet最后创建,但是要先关。

Statement其次。Connection最后。

当然了,也许在你的环境下,次序错了也没出事情。但是,咱么吃软饭的(吃软件这口饭的)图啥?不就图个放心吗?上厕所图啥?不就图个别让抓去当兔子吗?
也许某个driver对次序不敏感,但是不好说哪天你换个环境就忽然她奶奶的敏感了呢?
比如吧,你有connection pool, conn.close()把connection返回到connection。

你要是先conn.close(),好嘛,connection先回到pool了,正好别的线程里面等着要connection,立马这个connection又给分配出去了。
这下齐了,你statement, resultset还没关呢,那边事故单位领导就找上门了。什么香油油的桌子,什么桐油炸丸子,全给你送来了。这不添堵吗?

好在,在我们《呼呼,擦!》宝典中记载的“一下一下擦”神功,老少咸宜,童叟无欺,有道是:法擦大法好,不如法擦冰箱好!

跑题了。反正是,只要你一个try-finally对应一个资源,你就不可能在次序上出错。自然而然的就是后入先出的堆栈结构。
反观别的擦法,就没有这个效果,次序如何,全靠你自己掌握。弄错了,系统也不告诉你。等着吃桐油炸丸子吧。

这也是我们推广一下一下擦的一个原因。
简历应该怎么写,HR看一篇简历仅需要5秒吗,简历模板大全 简历应该怎么写?HR筛选一篇简历仅需要5秒?简历模板大全 阅读详情

相关推荐

Java技术面试中的幽默沟通艺术与实践

在技术面试中,沟通技巧与表达能力同样重要。Java作为主流编程语言,其技术深度与工程实践常成为面试焦点。通过将抽象概念具象化,例如用生活场景类比JVM垃圾回收机制,或用影视IP解释Spring框架原理,能显著提升信息传递效率。这种技术幽默化表达不仅增强记忆点,还能自然展现候选人的知识迁移能力。在互联网大厂面试场景下,合理运用文化符号共情与视觉化表达,既覆盖HashMap、LRU缓存等核心考点,又体现独特的沟通哲学。关键在于平衡娱乐性与技术密度,每个幽默点都应承载Spring Boot、微服务等实际技术价值。

weixin_29224309的博客 239

Java——try和finally的用法

Android开发——try的用法 一、try的使用 在代码中,可以使用try代码块进行防止错误导致应用崩溃 try{ println("Hello World!") } 这时,在try后面的大括号位置就会报错,这是因为try语句需要和catch语句一起使用 ...

Krisit的博客 1万+

【PADS-开发指南】

馒头破戒大师

sinat_23896491的博客 3227

java中的异常-异常处理(try、catch、finally、throw、throws)+自定义异常

(2)但我们的程序有时候想要在不满足某种业务条件时以抛出异常的形式来做处理,此时就需要我们自定义一个与业务相关的异常类来表示,例如分数不合法异常(ScoreException)1、java程序员在编写程序时提前编写好对异常的处理程序,在程序发生异常时就可以执行预先设定好的处理程序,处理程序执行完之后,可以继续向后执行后面的程序。(4)通常,这类异常的发生不是由程序员编写的代码引起的,例如:FileNotFoundException(文件找不到异常)

Watermelon_Mr的博客 3615

一、5.8GHz射频接收机链路仿真

5.8GHz射频接收机链路仿真 一、5.8GHz射频接收机链路仿真 文章目录5.8GHz射频接收机链路仿真目的一、原理1、仿真工具2、二次下变频超外超接收机二、要求三、内容总结 目的   1、熟悉射频接收机整体结构。   2、学习使用MATLAB工具进行行为级仿真。   3、进行简单的通信链路预算。   4、直观感受接收机各个模块对整体性能的影响。   5、分析增益、线性度、噪声系数等参数。 一、原理 1、仿真工具   MATLAB是一款功能强大的数学软件,针对不同领域提供各种工具箱,帮助设计者快

平乾的博客 6761

【NIFI】实现HANA->ORACLE数据同步

实现 HANA->ORACLE数据同步。

weixin_43159039的博客 1510

Java try 与 finally 对于返回值的影响

前言 话说在前头, 不建议在finally里操作返回值 ,当然这也仅仅是建议,有些场景你不得不在finally里去操作返回值,那也无妨。 而无妨的前提则是,你对finally操作返回值有所有了解。 正文 先来个开胃菜, 如果try里存在 return ,finally 也存在 return ,那么执行的是 finally 里的 return: 那么 try里面的retrun是否有执行? 答案是有的,只是执行后,会因为存在finally块而停止,先去执行finally,而在...

默默不代表沉默 2746

VL53L0X加盖玻片后精度暴跌?手把手教你完成串扰校准(CrossTalk Calibration)

本文详细解析了VL53L0X激光测距传感器加盖玻片后精度下降的原因,并提供了串扰校准(CrossTalk Calibration)的完整解决方案。通过分步指导和实用代码示例,帮助工程师恢复毫米级测距精度,适用于智能门锁、扫地机器人等应用场景。

weixin_33708432的博客 540

java's try and finally

java的try-finally给我们提供了一个“保证某个动作必然执行”的机会。一个try-finally结构,只要try块开始执行了,finally块里面的代码保证执行一次并且只有一次。 打个比方,就象你上厕所,只要你一旦开始拉了,我们保证无论如何,是拉稀了也好,放屁了也罢,最终你肯定是擦了屁股走出卫生间。应用try-finally,我们可以在异常满天飞的程序里保证我们的关键资源被按时正

honeyao's blog 705

压电阀控制器设计-总章

本文章用于回顾记录本人制作压电阀控制器的关键技术,本人所制作压电阀控制器已经上市得到应用,特在此对一些关键技术进行回顾记录,欢迎从事压电控制及压电阀相关人员一起讨论

qq_42712859的博客 850

Python模拟发送SOME/IP消息(Scapy模块)

SOMEIP提供服务、订阅、响应、通知等Python代码示例

liluo0815481的博客 3071

一篇好文,写得比较幽默

<br />java的try-finally给我们提供了一个“保证某个动作必然执行”的机会。  <br /><br />一个try-finally结构,只要try块开始执行了,finally块里面的代码保证执行一次并且只有一次。  <br />打个比方,就象你上厕所,只要你一旦开始拉了,我们保证无论如何,是拉稀了也好,放屁了也罢,最终你肯定是擦了屁股走出卫生间。  <br /><br />应用try-finally,我们可以在异常满天飞的程序里保证我们的关键资源被按时正确清理。一个最常见的应用就是jdbc的

pfgmylove的专栏 568

【ROS】ROS2导航Nav2:简介、安装、测试效果、错误处理

在ROS2中自动导航使用Nav2来实现。Nav2 使用几个独立的模块化服务,通过 ROS 2接口(例如动作服务器或服务)与行为树 (BT) 通信。Nav2 输入包括:TF转换、一个地图源、一个行为树 (BT) XML 文件和相关的传感器数据源;Nav2 输出速度命令;Nav2 支持多种机器人,比如:四足机器人、履带机器人、轮式机器人等。

郭老二 5092

转载一篇不错的博客:程序员的幽默

也是机缘巧合,让我一个之前工作从未接触过程序员的人,现在成天和程序员打交道,要知道,不懂技术,往往他们想和你幽默的搞笑一下,未必能读懂。都说程序员情商低,不爱说话,比较闷骚。可是,只要你深入的接触下来,会发现这是一群非常可爱的人。他们聪明伶俐、乐于助人、喜欢钻研技术、逻辑性强等等,很多闪光点让我对程序员的印象有了惊人的逆转。尤其是一些互联网大公司,例如:阿里、京东、美团的技术,虽然平常工作都比较忙...

光滑的秃头 5514

CloudCompare 二次开发(17)——点云添加均匀分布的随机噪声

使用CloudCompare编程实现点云添加随机噪声。

点云侠的博客 840

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Professional Programming技术幽默:程序员笑话与趣事

在高压的技术环境中,幽默感不仅是缓解压力的良药,更是团队协作的润滑剂。研究表明,适当的幽默能够: - ???? **提升创造力**:放松状态下的大脑更容易产生创新思维 - ???? **加强团队凝聚力**:共享笑声能够建立更紧密的合作关系 - ⚡ **提高问题解决效率**:幽默思维有助于跳出固有思维模式 ## 经典程序员笑话分类汇编 ### 1. 编程语言相关笑话 ```javascript ...

gitblog_00377的博客 858

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java求职者面试:幽默与技术的较量

在互联网大厂中,面试是一项关乎求职者未来的重要步骤。本文将以幽默的方式重现一位求职者谢飞机(假名)与严肃的面试官之间的互动,全面涵盖Java技术栈的多种问题,让读者在轻松的氛围中领略技术的深度。

m0_74990534的博客 650

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java开发人员幽默外号,好听的外号绰号 好听幽默绰号大全

好听的外号绰号 好听幽默绰号大全作者:柠檬片更新日期:2020-03-17 09:43:52阅读:11194学生时代是许多人心目中的美好回忆。而取外号,作为其中的高光时刻,在每次同学聚会时总是一次又一次的提起,引起会心一笑。取个外号,除了能展现出一个人的特征,也是表示亲密的方式。所以除了给同学朋友取外号之外,给自己的恋人取个昵称,也是许多情侣的乐趣日常。那么,有哪些好听的外号绰号呢?就快点来...

weixin_39746652的博客 5498

程序员的幽默——献给所有Java程序员

一程序员去面试,面试官问:“你毕业才两年,这三年工作经验是怎么来的?!”程序员答:“加班。” 某程序员对书法十分感兴趣,退休后决定在这方面有所建树。于是花重金购买了上等的文房四宝。一日,饭后突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:hello world。 问:程序员最讨厌康熙的哪个儿子。答:胤禩。因为他是八阿哥...

weixin_44040460的博客 251

只有程序员才懂的幽默

作者:Elisa  原文:https://programmerhumour.tumblr.com/post/616642939651850240/rip 程序员的幽默,往往就是这么朴实无华,且枯燥…… 谷歌搜索 “rm -rf ” 任务管理器 ,15个谷歌页面, 我的磁盘 图形化界面使用者与命令行使用者 老板:你有使用什么IDE的经验吗? 我:是的,...

三分恶的博客 2299

Java 集合框架 基础 - 幽默版

ArrayList是查找小能手LinkedList是增删高手HashSet是去重专家TreeMap是排序达人选对英雄,才能在对应场景下发挥最大战斗力!记住:工具千千万,场景不一般。用对工具事半功,用错工具事倍般。/ω\),支持一下。如果愿意的话关注一下。会对你有更多的帮助。每天都会不定时更新哦 >人<。

lenyan~的博客 906

Java太难了,我要开始学习了

Java太难了,我要开始学习了! 多读书,读好书,这里推荐学习**《Head First Java》** 幽默不失风度,小道消息,书里面频繁开车

qq_45896330的博客 8258

幽默故事

1、上完厕所正准备走,隔间传来一阵哀怨的声音:“哥们,帮帮我好吗?”我叹了口气:“不带纸就敢蹲坑,你也是蛮拼的!”他尴尬地笑了笑,说:“不是,你能不能帮我去问下这楼的wifi密码,我很努力地尝试过了,真的拉不出来!” 2、“运维是怎么介绍自己的工作经历的?” “部署完以后始终没有出现过问题,然后我就被公司辞退了。” 3、一个程序猿抱怨说,花了大价钱换了更快的宽带,可等女神回他消息还是要

u013232632的专栏 569

java流程控制语句,用幽默读懂知识

Java 中涉及控制执行流程的关键字有 if-else、while-do-while、for、switch、return、break、continue 等等;我们来挑几个来说道说道。 1、要么生,要么死 在网络上看到这么一句话:“人生不过三条路,要么生,要么死,要么生不如死”,经典啊!这句话套用在 if-else 语句上也非常的贴切,不信你看: 只有一个 if 语句 if (布尔表达式) { // 语句 } 或者一个if语句加上一个else语句 if (布尔表达式) { // 语句 } else { //

qq_43623970的博客 466
上一篇: 《疯狂的程序员》到手
下一篇: 谷歌李开复:我的传奇人生源于十句箴言
不善^
博客等级 码龄18年 635粉丝 235原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值