你应该更新的Java知识之常用程序库(一)

标签: 更新 java 知识 | 发表时间:2013-01-02 20:10 | 作者:dreamhead
出处:http://dreamhead.blogbus.com

在很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进。如果你曾离开Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老Java中的新东西。

Guava

一句话,只要你做Java项目,就应该用 Guava

guava是Google出品的一套Java核心库,在我看来,它甚至应该是JDK的一部分。作为一个Java程序员,如果你没抱怨过JDK的设计,只能说明一点,你写得程序还是太少。正是JDK设计不彰,才有了一些项目来补充JDK的不足。如果说老Java程序员应该听说过 Apache Commons Lang,那新Java程序员该知道的就是Guava了。

老Java程序员更多的是知道Google Collections,不妨到 它的主页上走一遭,你会看到这个库已经改名为Guava。事实上,Guava并不直接等于Google Collections,Guava是一个超集。Guava实在太强大了,要想展现它的强大,需要专门的介绍,这里就不展开了。

下面以一个统计单词出现个数的小程序作为这个段落的结尾,虽然无法与许多其它语言的实现相提并论,但作为一个Java程序员,你不妨想一下按照传统方式,这段代码应该是什么样子。

  String content = Files.toString(new File(args[0]), Charset.defaultCharset());
  Iterable texts = Splitter.on(CharMatcher.WHITESPACE)
                                                 .omitEmptyStrings()
                                                 .trimResults()
                                                 .split(content);
  Multiset collection = HashMultiset.create(texts);

Joda Time

你觉得一个API设计得差到什么份上,才会把自己差不多的API全部Deprecated掉。java.util.Date便是这样的奇葩。因为它的API几乎都是反直觉的,几乎所有敢于用它的Java程序员都吃过它的亏。想初始化个2013年的第一天,还真不那么容易:

  Date firstDayOf2013 = new Date(113, 0, 1);

如果你是个Java新手,你能猜出113是从哪来的吗?(好吧,它是2013-1900,至于为什么是1900,这真得问API的设计者了)。

Joda Time就是人们实在无法忍受这样东西的产物。同样的代码用Joda Time实现:

  DateTime firstDayOf2013 = new DateTime().withDate(2013, 1, 1);

无论如何,你知道这能看出这些参数的含义了。不只如此,你还可以计算两天后是什么日子:

  firstDate.plusDays(2);

日期格式化,也是JDK Date系列API里一大特色,你必须把代码写成下面这样:

  new SimpleDateFormat("yyyy.MM.dd").format(firstDayOf2013)

作为一个初始化很慢的构造函数,你还必须每次调用,因为它不是线程安全的。同样的代码,在Joda Time里,我们可以用DateTimeFormatter:

  DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy.MM.dd");

  ...

  formatter.print(dateTime);

请尽管放心大胆把formatter声明成一个字段,因为它是线程安全的。

当然,Joda Time的强大远不止于此。当然,JDK也并不是那么完全的自暴自弃,于是,有了一个JSR 310专门设计新的Date API。JSR 310的spec lead是 Steven Colebourne,此人正是Joda Time的作者。不过,虽然JSR 310为我们描绘了Date的全新景象,但Java 8出来之前就先别打它的主意了,乖乖地用Joda Time吧。

相关 [更新 java 知识] 推荐:

你应该更新的Java知识之常用程序库(二)

- - 梦想风暴
一句话,如果你写单元测试,就应该用 Hamcrest. 如今不写单元测试,你都不好意思说自己在做工程项目了. 如果你还写成下面这样,我只能说你落伍了:. 请告诉我,哪个是执行结果,哪个是预期结果,不管你是怎样,反正大多数情况下,我是记不住的. 所以,这个在只重功能不重可读性年代产生的API该更新了.

你应该更新的Java知识之常用程序库(一)

- - 梦想风暴
在很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进. 如果你曾离开Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老Java中的新东西. 一句话,只要你做Java项目,就应该用 Guava. guava是Google出品的一套Java核心库,在我看来,它甚至应该是JDK的一部分.

你应该更新的Java知识之构建工具

- - 梦想风暴
时至今日,如果你的Java项目依然需要启动一个特定的工具,比如IDE,才能编译部署,那你的项目不在本文的讨论之中,因为实在落后得太让人无语了. 旧时代的Java世界,构建工具等同于两个词 Ant和 Maven. Ant源自Make,同JUnit一样,它也是一个航班产物(参见《 Ant权威指南》序).

你应该更新的Java知识之Observer

- - Java - 编程语言 - ITeye博客
作为一个Java程序员,不熟悉设计模式简直不好意思和人打招呼,而Observer模式可以说是位列最常用的设计模式之列,虽然有时候在具体代码里,它不一定叫这个名字,比如改头换面叫个Listener,但模式就是这个模式. 手工实现一个Observer也不是多复杂的一件事,只是因为这个设计模式实在太常用了,Java就把它放到了JDK里面:Observable和Observer,从JDK 1.0里,它们就一直在那里.

java基础知识

- - CSDN博客互联网推荐文章
JAVA相关基础知识. 1、面向对象的特征有哪些方面. 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面. 抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节. 抽象包括两个方面,一是过程抽象,二是数据抽象. 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.

硅谷中的知识产权:Java大战

- - 译言-投资/理财/创业
硅谷的知识产权:Java大战  甲骨文和谷歌之间的法律斗争非常神秘,但是风险也非常高. 甲骨文和谷歌的老总分别是拉里·埃里森和拉里·佩奇. 他们的教名是一样的,但对某一知识产权问题的观点却是不同的. 4月16日,陪审团开始在庭审中听取双方的辩解,来决定谷歌的安卓操作系统是否侵犯了甲骨文公司的版权和专利.

欧朋浏览器6.2 For Android/Symbian/Java发布更新

- 洞箫 - cnBeta.COM
新一代浏览器界面,简约、精致、时尚,摆脱拥挤,复杂的手机浏览器界面,打造个性化的浏览器. 快速拨号“快速拨号”将喜欢的网站添加到首页,实现一键点击访问. 通过定制“快速拨号”,你可以打造一个个性化的浏览器首页. 体积小巧、功能强大,欧朋浏览器结合了强大的内核和领先的云端转码技术,可使手机访问网站速度提升5到10倍,使上网流量节省最高达90%.

苹果发布第二个 Java 更新(2012-002)

- - 果迷网
前天苹果刚刚发布 Mac OS X 的 Java 更新 2012-001,今天又接着发布了 Java 2012-002 更新,再度提高系统安全性. 根据统计,目前全球共有 60 万台 Mac 电脑感染了 Flashback 木马,这种木马正是利用了 Java 运行时的安全缺陷感染 Mac 电脑的.

深入理解Java虚拟机(JVM高级特性与最佳实践java虚拟机)的一些知识总结

- - CSDN博客推荐文章
        要回答这个问题,先了解下GC的发展史、jvm运行时数据区的划分、jvm内存分配策略、jvm垃圾收集算法等知识.         先说下jvm运行时数据的划分,粗暴的分可以分为堆区(Heap)和栈区(Stack),但jvm的分法实际上比这复杂得多,大概分为下面几块:.         1、程序计数器(Program Conuter Register).

Oracle Java SE 8 发行版更新:限制商业或生产用途

- - 开源中国社区最新新闻
Oracle Java SE 8 发行版更新. Oracle Java SE 8 的公开更新仍面向单独的个人使用提供,至少持续至 2020 年底. 2019 年 1 月以后发布的 Oracle Java SE 8 公开更新将不向没有商用许可证的业务、商用或生产用途提供. 如果您是使用者,将 Java 用于单独的个人用途,则至少在 2020 年底之前,您对 Oracle Java SE 8 更新仍具有与现在相同的访问权限.