花自飘零水自流。一种相思,两处闲愁。
——李清照《一剪梅》
[TOC]Java的历史和演变
1. 计算机语言的历史
 第一代语言:机器语言
 主要编写二进制码,直接编写100101010101这样的二进制,以打孔机为代表。
 第二代语言: 低级语言
 主要以汇编语言为代表
 在低级语言当中已经引入了一些英语单词。
 第三代语言:高级语言
 列如:c语言 c++ Java、…..
1.1 C语言之前的高级语言
C语言之前的这些版本,程序员通常需要在品质不同的各种计算机语言之间进行选择。BASIC,COBOL,FORTRAN,没有遵循结构化设计原则,依赖与GOTO作为程序控制的主要手段,很容易出现大量混乱的跳转语句和条件分支语句,使程序很难理解。Pascal的语言虽然是结构化的,但是不是针对高效率而设计的。
1.2 C语言诞生
20世纪60年代,贝尔实验室的研究员Ken Thompson(肯·汤普森)发明了B语言,并使用B编了个游戏 Space Travel,他想玩自己这个游戏,所以他背着老板找到了台空闲的机器 PDP-7,但是这台机器没有操作系统,于是Thompson着手为PDP-7开发操作系统,后来这个OS(Operating System)被命名为 UNIX,Thompson(肯·汤普森)发明了UNIX。
1971年,Ken Thompson的同事D.M.Ritchie(DM里奇),也很想玩Space Travel,所以加入了Ken Thompson,合作开发UNIX,他的主要工作是改进Thompson的B语言。
最终,在1972年这个新语言被称为C,取BCPL的第二个字母,也是B的下一个字母
C语言的演变历程
CPL(Combined Programming Language) - 1963,CPL是1963年剑桥大学发明的,C语言的祖先。
BCPL(Base Combined Programming Language) - 1967,剑桥的Matin Richards 对CPL做了简化,推出了BCPL
B(B Programming Language) - 1969,贝尔实验室的Ken Thompson(肯·汤普森) 对BCPL又做了改进,设计出了简单的且接近硬件的B语言,并用B语言写了第一个UNIX OS
C(C Programming Language) - 1972,贝尔实验室的另外一个人Dennis MacAlistair Ritchie(D.M.Ritchie - DM里奇)在B的基础上设计出了C语言。C 保持了B的优点(精炼、接近硬件),又克服了他的缺点(过于简单,数据无类型)。
1.3 C++ (带类的C语言)
C++(C plus plus Programming Language) - 1983,还是贝尔实验室的人,Bjarne Stroustrup(本贾尼·斯特劳斯特卢普) 在C语言的基础上推出了C++,这个时候你可能会想C这么强大的语言已经出现了为什么还会出现C++呢?这是因为C语言处理复杂性的能力也是有一定的限度的,C++ 它扩充和完善了C语言,特别是在面向对象编程方面,一定程度上克服了C语言编写大型程序时的不足。
1.4 Java的诞生
Java是由James Gosling、Patrick Naughton 、 Chris Warth 、Ed Frank 、和 Mike Sheridan 于1991年在sun公司构想出来的,开发第一个版本花费了18个月,这种语言最初称为Oak,在1995年被命名为Java。
1.4.1 推动Java发展的两大动力
一、嵌入到各种消费类电子设备的软件
二、万维网
小结:Java的设计、测试和不断改进是由真正从事编程工作的人员完成的。它是扎根于设计人员的需求和经验的一种语言,因此Java是程序员的语言。
1.4.2 Java 和其他计算机语言
Java和C
- Java 对Internet 编程
 - C 对系统的编程
 
Java 和 C#
相同点:他们都是面向对象的语言,也就是说,它们都能实现面向对象的思想(封装,继承,多态),两者共享相同的语法,都支持分布式编程,并且都利用相同的对象模型。
不同点:点这里…
Java 和 C++
- 都是面向对象的语言,都支持封装、继承和多态。
 - Java不提供指针来直接访问内存,程序内存更加安全。
 - Java的类是单继承的,C++支持多继承;虽然Java 的类不可以多继承,但是接口可以多继承。
 - Java有自动内存管理机制,不需要程序员手动释放无用内存。
 
2. Java改变 Internet 的方式
- Java applet(目前已被标记废弃)
 - 安全性
 - 可移植性
 - Java的魔力–字节码(bytecode)
 - JVM(Java virtual Machine)虚拟机–设计初为字节码解释器(HotSpot技术,JIT编译器)
 - Java Web Start处理多种类型的Java程序的部署机制
 - Servlet–服务器端上执行的小程序(与Servlet相似的CGI)
 
3. Java的关键特性
- 简单性–最初是面向程序员的。
 - 安全性
 - 可移植性
 - 面向对象
 - 健壮性–编好的程序在不同的运行条件下以可预见的方式运行是Java的关键特性。
 - 多线程
 - 体系结构中立–得益于JVM。
 - 解释执行
 - 高性能
 - 分布式
 - 动态性
 
4. Java的演变历史
Sun公司
- Java 1.0
 - Java 1.1
 - Java 2 – Java新时代
- 增加了Swing
 - 集合框架
 
 - J2SE 1.3
 - J2SE 1.4 – 与之前版本几乎达到100%的源代码兼容。
 - J2SE 5 – 从根本上扩展了java语言的应用领域,功能和范围(JDk5)。
- 有以下新特性:
- 泛型
 - 注解(annotation)
 - 自动装箱和自动拆箱
 - 枚举
 - 增强的 for-each 风格和 for 循环
 - 可变参数(varargs)
 - 静态导入
 - 格式化的 I/O
 - 并发使用工具
 
 
 - 有以下新特性:
 - Java SE 6 – 内部的开发版本号是1.6(JDk6)。
 
Oracle公司
- Java SE 7 – Oracle收购Sun公司后,第一个重要发布版本。(JDk7)
- 有以下新特性:
- String 现在能控制switch语句。
 - 二进制整形字面值
 - 数值字面值的下画线
 - 扩展的 try 语句称为带资源的 try (try-with-resources)语句,这种 try 支持自动资源管理。(例如:当stream不再需要时,现在能够自动关闭他们。)
 - 构造泛型
 - 对异常处理进行增强,单个 catch 字句能够捕获两个或更多个异常,并且对重新抛出的异常提供更好的类型检查。
 - 对某些方法(参数的长度可变) 类型关联的编译器警告进行了改进,尽管语法并没有改变,并且对警告具有更大的控制权。
 - 对 NIO 框架进行了增强,并且增加了 Fork/Join 框架。
 
 
 - 有以下新特性:
 
- Java SE 8 (JDk8)–新增了lambda表达式。
 - Java Se 9  ( JDK9 )  
- 新增的特性:
- 模块
 - JShell
 - 支持私有接口方法
 - 给javadoc工具添加了搜索功能。
 
 
 - 新增的特性:
 
总结:
- 大概了解了Java的演变历史和其功能的扩展,发现几乎每次版本的更新都对 API 库进行了更新,Java中JVM充满了神秘感,作为一个初学者发现其中有很多专业方面的词都不是很明白,其中查了一部分,但是还有很多要放在今后的学习中慢慢深入。
 - 这篇博客会在今后的学习不断的修改,当然如果有大佬指点带萌新感激不尽,在此留下qq1585636331,欢迎学习计算机语言的朋友加好友一起讨论学习,一起进步。