前言
每年技术媒体都会评选最受欢迎的编程语言,Java总是高居前位。自然,没有办法说一个语言绝对比另一种语言好,这个话题一如既往地会引起大家无谓的争论不休。对别的行业的人来讲也许会觉得莫名其妙,但是对我们程序员来讲,捍卫某种语言是一件很动感情的事情。就跟捍卫自己的母校一样,只能自己说不好,别人不能说不好的。
Java从正式出生以来(1995.05.23),已经过了24年时间了,它现在仍在全世界广泛被使用,拥有大量程序员和工作机会,这一个事实毫无疑义地证明了Java的成功。
但是,大家切记的是,讨论Java,不能当它只是一门编程语言,它还是一个平台,同时是一个生态。我二十多年前在Sun公司技术研发中心的时候,一个工作任务之一就是告诉大家Java不仅仅是一门语言。我们的技术总监曾经说,如果一定要认为Java是一门语言,可以说“Java是服务端的语言”。我把这个历史说出来,就是让大家在学习语言的时候记住Java有其更加广泛的空间。
不过,本系列讲座又确实主要从语言本身的层面介绍Java。针对的对象是初步了解Java语言的程序员,如本专业的大学毕业生或者是从事编程工作一年时间的程序员们。希望对Java语言有一个进阶的理解。
我本人曾经身在Sun Java团队之中,虽然没有为Java发展做出什么贡献,没有开辟新大陆,就像是一个跟随哥伦布船队的小船员,也是见证了一段历史,而对新大陆热爱的心却一直在澎拜。希望这个系列讲座为Java布道,对后来的年轻人能有所帮助。
就跟世界上任何自然语言一样,人为发明约定的编程语言也是不断与时皆进的。从一个婴儿慢慢长大成人。
我们来看看Java的成长历史。
Java前传
1990年,Sun公司启动“Green计划”,旨在开发智能家电的嵌入式控制系统。
1991年,Green项目组发现家用设备太多样化,C++移植过于繁琐,无法统一编程,Gosling决定开发一种新的可移植语言,开头想叫C-,后来命名为“Oak”。名字来自于办公室窗口的一棵树。
1994年,Gosling将Oak更名为Java,名字来自于工作间隙Gosling去饮水机冲咖啡时候的一闪念。接着团队完成JVM实现,完成第一个Java编译器,完成Java实现的浏览器WebRunner(后来的HotJava)。这个团队总共三个人。
这就是创世时刻的样子。
Java发布史
1995年5月23日,Sun公司正式发布Java语言,这一天是JAVA的生日。
1996年,JDK1.0发布,这是重要里程碑,标志着它成为一种独立的开发工具。在1996年5月底,Sun公司于美国旧金山举行了首届JavaOne大会,这成为历史上传统的经典盛会。
1998年12月,第二代Java平台的企业版J2EE发布。
1999年6月,Java2被分成三个版本:J2SE(标准版)、J2EE(企业版)、J2ME(微型版),有一个重要的里程碑,标志着Java的应用开始普及。
2001年9月24日,J2EE1.3发布。
2002年2月,J2SE1.4发布,各种开源框架大量出现。
2004年9月30日18:00PM,J2SE1.5发布,成为java语言发展史上的又一里程碑。
2005年6月,Java SE 6.0发布,三个版本分别改为:JavaSE, JavaEE,, JavaME。
2009年4月20日,Oracle以74亿美元收购Sun公司,并取得了Java的版权。
2011年7月,JavaSE7发布。
2014年3月,JavaSE8发布。
Java特性演化史
1996年,JDK 1.0主要包括的特性:Applet、AWT等。在网页上动态变换的小动画震惊了整个Internet技术圈。
1997年,JDK 1.1,引入了一些后来常用的技术点,如:JAR文件格式、JDBC、JavaBeans、RMI,Inner Class和Reflection。
1998年12月4日,史诗巨献的JDK 1.2发布,包含的主要技术,如EJB、Java Plug-in、Java IDL、Swing等以及后来常用的Collections集合类。
2000年中,JDK 1.3发布,主要改进和引入了一些类库上,如数学运算和新的Timer API,JNDI服务,CORBA IIOP,Java 2D。
2002年,JDK 1.4发布,标志着Java的成熟,引入了一些新技术特性,如正则表达式、NIO、日志类、XML解析器等。
2004年,JDK 1.5发布,改进包括了自动装箱、泛型、动态注解、枚举、可变长参数、foreach循环,还提供了java.util.concurrent并发包等。
2006年12月11日,JDK 1.6发布,并改用Java SE 6、Java EE 6、Java ME 6的命名方式。重大的改进包括动态语言支持、提供编译API等。虚拟机层面,包括锁与同步、垃圾收集、类加载等方面的算法都有很多改动。
后来,由于经济危机和收购案,Java发展遇到诸多挫折,Java7难产。
2011年Oracle发布的Java7采用了B计划,没有按照原先的设计推出。重要的改进包含:动态类型语言在 JVM 上的执行效率得到大幅提升,G1 垃圾回收器性能, 主要用于 Server 端,核心类库改进: ClassLoader, URLClassLoader, Concurrent, i18n
2014年,发布Java8,主要的改进是终于引入了Lambda表达式。
2018年,发布Java11,主要是增强如下功能:本地变量类型推断,集合加强,Optional 加强,HTTP Client API。化繁为简,一个命令编译运行源代码。这是最近的一个LTS,将支持到2026年。
历史评价
Java是一个划时代的跨平台产品,这个最基础最根本的设计初衷已经完全达到;
Java衍生出来的框架及其生态是世界上最成功的技术平台之一,这一点超出了设计初衷;
Java最功败垂成的设计是EJB,这是Java企业版本中最重大最着力的技术革新,由于设计和实现的复杂,推广困难,被悉尼大学的Rod Johnson这个音乐学博士单枪匹马挑下马,最后完败于轻量级框架。
Java是Sun公司及James Gosling对人类的伟大贡献,而没有获取到什么利益。
本系列讲座,我打算讲到下面的一些主题:
- - Generic Programming
- - Reflection
- - Proxy
- - ClassLoader
- - Inner Class
- - Event
- - Lambda
- - RE
- - Multi-Thread
- - Collections
- - IO
- - Annotation
- - Script
编程,不仅仅是学,还是做,说到底是一个手工艺活儿。
曾经有好些入门的年轻人问我如何编得一手好程序?我的回答总是“无他无他,惟手熟尔。”要想提高编程水平,唯一的方法就是动手去编。只要结合“眼”“脑””手”三者,不断学,不断想,不断做,就能大有成效。坚持两三年,迈上一个崭新的台阶,到了那时,定会体会到“虽人不我知,而胸中自有沟壑”的美妙境界。
荀子云:学不可以已。