Java开发的30点心得

来,喝杯Java

本文为自己在写Java代码中积累的一些心得,今天拿出来分享,不妥之处,请不吝赐教!若你有好的idea,也请评论区说说,我一并加上。

通用(General)

1.虽然有JVM帮你回收内存,但这不等于内存就不会溢出。请慎重new对象,能够复用就复用吧,new那么多对象,即使JVM及时帮你回收了,性能也是个大问题,更何况“JVM及时帮你回收”就是个不靠谱的假设。
2.有些时候,GC(Garbage Collection)是个鸡肋。
3.你理解JVM的深度决定了你的Java代码质量。
4.任何强制类型转化都是B-U-G的沃土(对任何语言都适用)。
5.Java源代码是个桃花源,没事就去逛逛,当然里面也有些代码写得很烂,不过极少。
6.字符串频繁改变时,请使用StringBuilder或者StringBuffer,把String扔了吧。使用StringBuilder时,最好先评估一下字符串的长度,一次分配需要的空间。
7.追求优雅代码之路永无止境,能否写出优雅代码取决于扎实的计算机系统观,对特定语言(比如Java)的理解深度。
8.折中是面临两难问题时的最佳解决方案,其来自于“中庸”思想。
9.拿到一个功能,半小时内没有思路,就去Maven中央仓库或者github找一个开源实现吧。开源时代,不必重复造轮子,但可造一个还没有的轮子并与全球分享。
10.虽然我们只使用编程语言写代码,但对程序员来说英语比任何编程语言都重要。

集合(Collection)

1.遍历集合时,有remove操作的情况下,不能使用下标遍历,会漏掉元素,需使用迭代器遍历。
2.遍历集合,for-each和迭代器优先。

异常(Exception)

1.低层抛出,高层处理。
2.catch多个异常,使代码更简洁。
3.使用带资源的try语句,资源自动关闭,使代码更简洁,资源需实现AutoCloseable和Closeable接口。
4.异常跟踪栈中,排在最前面的就是异常的根源所在,参考活动记录的原理(《编译原理》里有活动记录的解释)。

日志(Log)

1.飞机失事了,找黑盒子,程序失事了,找日志(日志对程序的重要性可见一斑)。
2.程序中出现e.printStackTrace(),难道应用上线后,我们专门搬个凳子盯住控制台?不然有什么意义呢?请使用logger.error([额外的描述]+e.getMessage(),e)代替,[额外的描述]可选。
3.程序中出现System.out.println([额外的描述]),道理同上,请使用日志代替它吧。
4.让日志成为程序的守护神。

数据库操作(JDBC)

1.如果关系型数据库是金矿,那么SQL就是提炼金子的利器,多花时间练练。磨刀不误砍柴工。
2.禁止使用SELECT *。
虽然很多开发经理都写了这条,但是总有开发人员不理你,我给你个办法,拦截所有SELECT,一旦发现SELECT *,给他个BadSQLException,让他疼上几次就好了!
3.和笛卡尔积作斗争,禁止使用FROM table1,table2,tableN。
实际应用不是我们在学校做的那些“XX管理系统”,这走的是笛卡尔积啊,如此大的开销,你透支得起?请使用连接查询吧!避免的方法和3类似。
4.SELECT时,不要取多余的数据,但也要保证能取到的都一次拿到(当然内存要放得下,否则另当别论)。
5.INSERT和UPDATE,能够批量更新就不要单条更新,访问数据库是I/O,开销很大,次数越少越好。
6.那些不经常变化的基础数据,一次捞出来缓存吧,会给你带来成倍的性能提升。
7.数据库连接池是个好东西,你值得拥有。

多线程(Muti Thread)

1.如果在你心中,实现多线程的方式只有extends Thread或者implements Runnable,你该去看看implements Callable<T>了,实现Callable,线程可以有返回值,还可以抛出异常,何乐而不为?
2.Java线程池是个花花世界,何不常去逛逛?
3.synchronized是个脾气大的家伙,不要轻易使用它,非要使用的话,锁的代码块越小越好。

设计模式(Design Patterns)

1.单例模式要保证反序列化后仍然是单例,需要有readResolve方法。
2.通用的算法(业务)步骤,采用模板方法模式设计。

类加载(Class Loader)

1.现实世界是拼爹的世界,Java的类加载也是拼爹的世界。
Java类加载就是在拼爹(美其名叫父类委托),父加载器已经加载了的类,子加载器就不需要加载了;倘若我爹在上海陆家嘴有套房,我自己也不用买了。父类没加载的类,就得靠自己了;现实是没有,我还得靠自己。现实世界和程序世界,都是在拼爹!

语法糖(Syntactic Sugar)

所谓的语法糖,是编译器送给程序员的糖,即之前需要程序员手动去完成的事情,现在由编译器来实现,其实就是编程语言为了迎合程序员而做的工作。随着编译技术越来越强大,语法糖会越来越多,写代码会越来越轻松。
Java有许多语法糖,泛型,自动装箱,自动拆箱,Lambda表达式等,将来还会有更多。
1.谨慎自动拆箱里的坑

public static void main(String[] args) {
    Integer a = 10;
    int b = a;
}

这两行代码再平常不过了,可编译器悄悄地做了啥呢?javap -c反汇编编译后的class文件,main方法编译后的字节码为:

public static void main(java.lang.String[]);
    Code:
       0: bipush        10
       2: invokestatic  #2                  // Method java/lang/Integer.valueOf:
    (I)Ljava/lang/Integer;
       5: astore_1
       6: aload_1
       7: invokevirtual #3                  // Method java/lang/Integer.intValue
    :()I
      10: istore_2
      11: return

So,所谓的自动装箱是Java自动给我们调用了Integer.valueOf这个静态方法;所谓的自动拆箱是Java自动给我们调用了Integer对象的intValue方法。换言之,坑会出现在自动拆箱时,想想下面的代码会发生什么?

Integer a = null;
int b = a;

So,保险的自动拆箱代码推荐这样写。

Integer a = null;
int b = 0;
if(null != a){
    b = a;
}

现在就不会出现NullPointerException了。

实践出真知,不断更新中……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,654评论 18 399
  • 岁月如流,我从一个闲云野鹤的散淡的人,走到了销售平台上,做起了一名信贷经理,工作是一针稳定剂,使我内心安稳,工作也...
    诗丹阅读 104评论 0 0
  • 凌想 / 文 1 在一次亲子课上,一位母亲向老师求助,说她的孩子快11岁了,还是很粘她,总想和妈妈有身体上的接触。...
    凌想阅读 886评论 6 12
  • 开工之后的谈话还是来了,社交圈中,真真假假,且都当做真心吧。 毕竟领导也是人生重要的导师之一,当属特殊的缘分。
    礽哥儿阅读 133评论 0 0
  • 本文来自微信公众号趣硅谷,图文版在这里↓ 硅谷S03E09:那些技术酷炫却被用户艹翻的Pied Piper们 剧情...
    趣硅谷小8阅读 1,181评论 0 0