聊聊Java(三)

前面“聊聊Java”已经聊了三篇了,争取用这篇对这个系列做个小结。

javacup

这篇主要对Java的展望、个人经验的简要小结和一些值得推荐的资源。

说到对Java发展的展望,就不得不提到JCP。

Sun在1995年公开了Java这样一个技术,在三年后也就是1998年,Sun又创建了一个开放的社区组织JCP(Java Community Process,翻译过来大概是Java社区进程),让关心Java的人都可以来参与Java特征和新版本规范的制定,而非让Java只有Sun一家把控。与JCP相关的一个概念JSR,Java Specification Request,是一个以特定格式详细描述需求的规范文档。JSR可以由一个JCP成员发起,经过多个状态。JCP最后产出三个东西——规范Specification、参考实现Reference Implemention、技术兼容包Technology Compatibility Kit。

2010年,Oracle收购了Sun,加大了其对Java的影响。在展望Java未来前,我们再来回顾下Oracle时代的Java7。

2011年,Java 7发布。在Java7中主要做了以下几件事情:提供了异步IO,提供了新的文件系统API,增强了对非Java语言的支持,用了G1垃圾收集,还有就是Java语言语法易用性上的改进。

有关Java7更详细的说明请参见http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html

下面对Java的未来做一些展望 。时代在不断的变迁,需求也不断的更新,人们对Java的期待实在太多,Sun被收购,Java7的发布拖后,JCP的效率低下也被人所诟病。未来的Java需要解决的问题很多,说说主要的几个。

  • 服务模块化,OSGi则一直是工程师的首选,对于未来Java来说模块化是很重要的需求。Jigsaw在路上。
  • 对于高级开发语言来讲,闭包是很有价值的部分,因此Lambda也是大家对Java的一个期待。
  • Java语言的易用性和Java的高性能一直都是Java人所追求的,这点在未来的Java中也一样会受到关注。
  • 很多非Java语言和技术的使用以及他们和Java的结合应该受到关注,Groovy、Scala、Jruby。Javascript也在各种应用场景也在发挥着新的作用,将这些和Java整合也是Java很重要的发展点。
  • 此外,如今已是云计算时代和大数据时代,如何适应这个变化发展的背景环境,也是Java发展所需要考虑的。

接下来,Java8会发布,对Java8感兴趣的,可以看下这个。

http://www.jcp.org/en/jsr/detail?id=337

对Java,本人也还在学习和认知理解的阶段,可以算得上是菜鸟一个,在应用实践中略有一些感想,小结一下。一来有助于自己回头复习的时候有个参照,二来也希望真的对同在学习Java的人有那么一点点帮助。

作为一个接触Java0-3年的人,对Java语言的学习运用依然是很重要,这是接触Java的第一个阶段。Java到目前已经发展了18年,为了满足各个方面的需求,不断增加新的东西,这对于学习Java的人还是有一些成本的。其中涉及面向对象概念的理解,这需要一个过程,最初是对规则比较死和硬的认知和记忆,而后逐步过度到理解和融入自己的思维方式,去实践去设计。面向对象这块,主要的语法体现,就是继承、封装、多态,具体到Java就是extends/implements,public/protected/default/private和overload和override。除此之外的语法涉及面也比较广,主要包括容器、泛型、IO和多线程并发相关的内容等,细节就不一一说明了。在这块Thinking in Java是非常经典的学习资料,本书的作者也是《Thinking in C++》的作者,Bruce Eckel,至少本人觉得值得反复读反复学习,从中学到的不只是语法使用上的东西。

在此基础上,还要对Java的体系结构和IDE有认知了解。IDE不用多说,Eclipse是非常好的开发环境,用起来非常舒服,插件化支持非常好,有必要熟练掌握其使用。Java体系结构的话,API实际上和上面所说的是相关联的,要能熟悉JavaDoc中所描述的才好。必要的时候去查文档,文档要看官方的,http://docs.oracle.com/javase/7/docs/api/,除非有把握或者真的值得相信,论坛的东西是不会比官方文档更靠谱的。除了Java language和API,了解class文件的大致结构是有必要的,比如至少知道0xCAFEBABE这是个什么东西。其实,说起对Java体系结构有了解,JVM是这其中最需要了解,也值得深入挖掘的东西。前文说过,JCP制定的只是一个规范,虚拟机也是一样,她允许不同的实现。对于规范,可参见这里http://docs.oracle.com/javase/specs/jvms/se7/html/。还有一本书个人觉得也不错,《Inside the Java Virtual Machine》,不过这本书年代比较久远,有些东西可以说是过时了,而且这本书估计是买不到了,可以参看这里http://www.artima.com/insidejvm/blurb.html 。提JVM规范可能扯得有点远,作为工程师,其实能对JVM的配置和调优有所掌握是有必要的,运行程序要知道自己运行在什么情况的环境下,在这点上,周志明的深入理解Java虚拟机还算不错,可以读一读。这里说了好多JVM,我觉得学习JVM,至少需要了解她是如何进行类加载的、如果进行垃圾对象回收的,比如Hotspot就分了新生代和老生代,在不同区域用不同的算法进行回收。了解JVM怎么保证安全其实也有必要,这里就不多说了。想更多了解JVM的规范和实现的,可以看这里,昨天刚刚看到前淘宝网同事莫枢的分享,非常不错:http://book.douban.com/doulist/2545443/ 。

到这里,其实已经有了前面两者的基础,就可以做很多事情了。前面的文章里我提过,不是所有问题都是仅靠技术就能解决的。作为工程师,除了掌握这些技术基础外,更多的是去实践,在具体的业务场景下解决具体的问题。目前来看,很多情况我们应用Java解决问题,需要了解Servlet这个东西。我最初是在学校里的一门课程了解到,当时的教材叫《J2EE程序设计》,不是很推荐。后来倒是看过一本叫Head First Servlets and JSP,评论这本书,我觉得可以说“很生动”,呵呵。和Servlet相关的,至少要知道Tomcat是什么东西,Jetty和Tomcat又是啥关系,可以看看Tomcat:The Definitive Guide,OReilly出品。

之后,随着业务需求复杂化了,应用的工具和框架了,可能就不止这些,Ant、Maven、Spring、Struts、Hibernate、Ibatis、Freemarker/Velocity。对于这些,更多的是了解文档,会配置会应用。当然,我觉得对于优秀的开源产品,源码是一个很好的学习资源。当然这需要时间和精力,具备一定理论基础和搭建好一个合适的调试环境在这个过程中都很重要。本人粗略读过SpringIOC部分和Tomcat的部分源码,了解Tomcat可以看早期版本相关的一本书How Tomcat Works,但Tomcat的源码有些复杂,可能去看Jetty是更好的选择。读源码的目的一方面是作为基础语法和实践不足的补充,另一方面可以看看一个好的开源的产品是怎么设计架构的。

对于企业级的开发,其实还有一些几乎是必须要学习的。分布式应用的开发离不开高性能的网络通信,基于服务的架构(SOA)几乎是必然用到的。这就有必要知道Java的RMI和序列化的作用,BIO和NIO的不同,netty是啥东东,传统的基于XML的WebService还有一些如Hessian的技术也都是有必要熟悉下的,也要知道ActiveMQ是干嘛的怎么用。 这方面有本书可以看下,淘宝网的林昊分布式Java应用:基础与实践,虽然书中直接具体讲分布式的内容比例并不算大,但读读还是有收获的。

上面说来说去都是紧密和Java相关的,其实在很多场景下,Java不是万能的,相关的技术也要有所学习有所了解才能更好的和Java结合起来解决问题。比如Mysql是很好的数据库,提供了丰富的存储引擎,采用何种更合适。Java是一个平台,那平台之下的OS如何和JVM交互并支持着JVM等。还有就是JVM如何去调优,是否有可能对JVM了解后做一些适合特定业务场景的改进。扯远了……

除了上面提到的,还有很多不错的书目值得推荐,比如Core Java》(分卷一、卷二)等,更多的还请大家多多探索和沟通。

此外,我还想说一句的是,这个世界上很少有什么东西能更无限长久地生存下去,技术也是一样。Java已经走过了近20年的风风雨雨,这是十分难得的。早在Java诞生后的第十个年头,2005,Bruce A.Tate就著有Beyond Java, 里面分析了Java从诞生到发展的过程,也指出了Java的危机和将来有可能会超越Java甚至替代Java地位的语言或技术。虽然里面的提到很多危机并没有影响到Java的实际发展,或者被Java解决掉了,或者不是什么危机。但随着Java的成长,我们在看到其成功的优势背后还仍然存在很多问题。我们有必要关注Java的发展动向,有必要关注新技术的成长。

到这,这篇文章写的已经不短了,“聊聊Java”就聊到此为止吧。这些内容都是本人想到哪写到哪,多而杂,有描述不对的地方,还希望指出,共同讨论共同进步,谢谢!

聊聊Java(零)
聊聊Java(一)
聊聊Java(二)
聊聊Java(三)

相关文章:

此条目发表在 Java, 开发, 计算机技术 分类目录,贴了 , , , , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>