摘要:发布史年月日,公司正式发布语言,这一天是的生日。年月日,发布,成为语言发展史上的又一里程碑。年月,发布,三个版本分别改为,,,。年月日,以亿美元收购公司,并取得了的版权。年月日,发布,并改用的命名方式。
特此声明:本文为本人公司郭总原创书籍的前言,该书还未出版,作为该书籍的初版在接下来的时间里,将免费在本人微信公众号内不间断更新与大家一起学习阅读。喜欢学习的小伙伴可以搜索微信公众号:程序员Hotel 或者在文末处微信扫描二维码识别关注
前言
每年技术媒体都会评选最受欢迎的编程语言,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表达式。
历史评价
Java是一个划时代的跨平台产品,这个最基础最根本的设计初衷已经完全达到;
Java衍生出来的框架及其生态是世界上最成功的技术平台之一,这一点超出了设计初衷;
Java最功败垂成的设计是EJB,这是Java企业版本中最重大最着力的技术革新,由于设计和实现的复杂,推广困难,被悉尼大学的Rod Johnson这个音乐学博士单枪匹马挑下马,最后完败于轻量级框架。
Java是Sun公司及James Gosling对人类的伟大贡献,而没有获取到什么利益。
本系列讲座,我打算讲十五个主题:
主题 1 - Generic Programming
1.1 Generic Class
1.2 Generc Methods
1.3 Bounds & Wildcard Types
1.4 Ceneric Code & VM
1.5 Reflection and Generics
主题 2 - Reflection
主题 3 - Proxy
主题 4 - ClassLoader
主题 5 - Inner Class
主题 6 - Event
6.1 Event Object
6.2 Actions
6.3 Event Handling
主题 7 - Exception
7.1 Exception
7.2 Assertion
7.3 Logging
7.4 Debugging
主题 8 - RE
主题 9 - Multi-Thread
9.1 Threads
9.2 Synchornization
9.3 Thread-Safe Collections
9.4 Executors
主题 10 - Collections
10.1 Interfaces
10.2 Collections
10.3 Framwork
10.4 Algorithms
主题 11 - IO
11.1 Streams
11.2 Text
11.3 Binary Data
11.4 Files
主题 12 - Network
12.1 Sockets
12.2 Implementing Servers
12.3 Web
12.4 E-Mail
主题 13 - Enum
主题 14 - Annotation
主题 15 - Script
编程,不仅仅是学,还是做,说到底是一个手工艺活儿。曾经有好些入门的年轻人问我如何编得一手好程序?我的回答总是“无他无他,惟手熟尔。”要想提高编程水平,唯一的方法就是动手去编。只要结合“眼”“脑””手”三者,不断学,不断想,不断做,就能大有成效。坚持两三年,迈上一个崭新的台阶,到了那时,定会体会到“虽人不我知,而胸中自有沟壑”的美妙境界。
荀子云:学不可以已。
原创书籍目录传送门:《Java十五讲》
微信扫描下方二维码(微信公众号:程序员Hotel), 更多优质资源及优质文章及时获取,请大家多多支持哦!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/73995.html
摘要:基于版本基于版本。由于中英行文差异,完全的逐字逐句翻译会很冗余啰嗦。译者在翻译中同时参考了谷歌百度有道翻译的译文以及编程思想第四版中文版的部分内容对其翻译死板,生造名词,语言精炼度差问题进行规避和改正。 来源:LingCoder/OnJava8 主译: LingCoder 参译: LortSir 校对:nickChenyx E-mail: 本书原作者为 [美] Bru...
摘要:然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。输出格式对每一组需要检查的序列,如果其生成的二叉搜索树跟对应的初始序列生成的一样,输出,否则输出。 本篇为关于树的编程题,给出编译器 C++(g++)的解答。主要记录题意理解和代码学习过程。 1 树的同构 题目 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是同构的。例如图1给出的两棵树就是...
摘要:起初的提出的初衷是将其作为一个通用的介于与间的语法模型。的基本使用要使用我们需要下载,在爬虫入门到精通环境的搭建这一章也说明怎么装,如果还没有安装的话,那就去下载安装吧直接看代码实战吧。 本文章属于爬虫入门到精通系统教程第六讲 在爬虫入门到精通第五讲中,我们了解了如何用正则表达式去抓取我们想要的内容.这一章我们来学习如何更加简单的来获取我们想要的内容. xpath的解释 XPath即为...
摘要:动态代理个经纪人如何代理个明星掘金在代理模式女朋友这么漂亮,你缺经纪人吗中我们用宝强的例子介绍了静态代理模式的概念。掘金使用从头创建一个,这种方法比较简单。 动态代理:1 个经纪人如何代理 N 个明星 - Android - 掘金在 代理模式:女朋友这么漂亮,你缺经纪人吗? 中我们用宝强的例子介绍了静态代理模式的概念。 本来我的目的是通过大家耳熟能详的例子来加深理解,但是有些网友指责...
摘要:前言估计很多朋友都认为参数校验是客户端的职责,不关服务端的事。轻则导致服务器宕机,重则泄露数据。所以,这时就需要设置第二道关卡,服务端验证了。老项目的服务端校验不能为空不能为空看以上代码,就一个的校验就如此麻烦。 前言 估计很多朋友都认为参数校验是客户端的职责,不关服务端的事。其实这是错误的,学过 Web 安全的都知道,客户端的验证只是第一道关卡。它的参数验证并不是安全的,一旦被有心人...
阅读 2022·2023-04-26 02:15
阅读 2303·2021-11-19 09:40
阅读 1040·2021-10-27 14:13
阅读 3308·2021-08-23 09:44
阅读 3611·2019-12-27 12:24
阅读 655·2019-08-30 15:53
阅读 1166·2019-08-30 10:53
阅读 2154·2019-08-26 12:14