文章目录
“不学古人,无以明今;不学今人,无以立古。” —— 朱熹《诗言志林·诗学杂谈》。
一、Java语言的出现
1991年,成立了一个称为Green的项目小组,小组成员有:帕特里克、詹姆斯·高斯林、麦克·舍林丹和其他几个工程师。
他们一起组成的工作小组在加利福尼亚州门洛帕克市沙丘路的一个小工作室里面研究开发新技术,专攻计算机—在家电产品上的嵌入式应用。
由于C++所具有的优势,该项目组的研究人员首先考虑采用C++来编写程序。但对于硬件资源极其匮乏的单片式系统来说,C++程序过于复杂和庞大。
为了解决困难,他们首先着眼于语言的开发,对于新语言的设计,Sun公司研发人员并没有开发一种全新的语言,而是根据嵌入式软件的要求,对C++进行了改造,去除了留在C++的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言。
1994年将Oak语言更名为Java。
二、Java语言的发展
年份 | 说明 |
---|---|
1994 | Java语言诞生 |
1996.1 | JDK 1.0 开发代号为 Oak ( 橡树 )。 |
1997.2 | JDK1.1发布,引入JDBC(Java Database Connectivity)、支持内部类、引入Java Bean、 引入RMI(Remote Method Invocation)、引入反射(仅用于内省)。 |
1999.6 | SUN公司发布Java的三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME) |
2000.5 | JDK1.3发布,JDK动态代理(常用) |
2000.5 | JDK1.4发布,引入了NIO(Non-Blocking IO)(常用)。 |
2001.9 | J2EE1.3发布,引入的新特性包括、引入Java Sound API、jar文件索引;、对Java的各个方面都做了大量优化和增强。 |
2002.2 | J2SE1.4发布,XML处理;Java打印服务;引入Logging API;引入Java Web Start;引入JDBC 3.0 API;引入断言;引入Preferences API;引入链式异常处理;支持IPv6;支持正则表达式;引入Image I/O slot machine API。 |
2004.9 | JDK 1.5,自动拆箱/装箱(Auto Inbox/Outbox)(常用)、枚举(Enum)(常用)、静态导入 (static import)、可变参数列表 (var args)(常用)、范型(Generic)(常用)、增强for循环(for-each)(常用)、注解(Annotation)(常用)、协变返回类型:实际返回类型可以是要求返回类型的一个子类、concurrent并发包(Doug leg)(常用) |
2006.12 | JDK 1.6,支持脚本语言;引入JDBC 4.0 API;引入Java Compiler API;可插拔注解;增加对Native PKI(Public Key Infrastructure)、Java GSS(Generic Security Service)、Kerberos和LDAP(Lightweight Directory Access Protocol)的支持;继承Web Services;做了很多优化。 |
2011.7 | JDK 1.7,Switch支持String(常用)、try … with … resource(常用)、范型类型自动推断(常用)、多重catch(常用)、数字可用下划线分割 |
2014.3 | JDK 1.8,接口默认方法(常用)、lambda表达式(常用)、函数式接口(常用)、Stream API(常用)、新的日期工具类(常用)、Optional工具判断(常用) |
2017.9 | JDK 1.9,模块化、改进 Stream API、支持私有接口方法、多版本兼容、集合工厂方法,优化集合初始化(常用) |
2018.03 | JDK10,局部变量类型推断(常用)、并行full gc的G1、基于实验Java的JIT编译器 |
2018.09 | JDK11,增加一些实用API(常用)、HttpClient增强(常用,已转换为正式版)、ZGC、完全支持Linux容器(常用) |
2019.03 | JDK12,Switch Expression优化、 |
2019.09 | JDK13,字符串拼接优化 |
2020.03 | JDK14,witch优化变为最终版、gc相关优化、instanceof 扩展 (preview)、 |
2020.09 | JDK15,引入了Record类型,解决定义大量get/set方法的问题、 |
2021.03 | JDK16,instanceof 增强确定为最终版本、Records确定为最终版本、将JDK移植到Windows/AArch64平台。提供用于打包独立的Java应用程序的jpackage工具。 |
2021.09 | JDK17,JDK 内部的强封装、删除远程方法调用 (RMI) 激活机制、删除实验性 AOT 和 JIT 编译器、弃用 Applet API 以进行删除…等。 |
… | … |
三、Java语言的概念
Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。
Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。
四、Java"白皮书"的关键术语
3.1简单性
可以理解 Java 语法是 C++ 语法的一个“纯净版本”,它继承了 C++ 的优点,并去掉了 C++ 里难以理解的头文件、指针运算等概念,使 Java 语言学习起来更简单,使用起来也更方便(不过,如今的 Java 复杂程度,还是远远超过了一部分的编程语言);
简单性的另一方面提现是“小”,Java 的目标之一是支持开发能在小型机器独立运行的软件。基本的解释器以及类支持大约仅为 40KB,再加上基础的标准类库和对线程的支持(基本上是一个自包含的微内核),大约需要增加 175KB,在当时,这是一个了不起的成就(当然,由于不断地扩展,类库已经相当庞大了)。
3.2面对对象(封装、继承、多态)
面向对象: 万物皆对象的一个编程思想,生活中的任何一个物体都可以是一个对象。
对比面向过程: 面向对象不注重事情中的每一个步骤和顺序,它更注重于事情中的参与者(对象),和对象需要做什么。(面向过程直接和高效,面向对象更易于扩展、复用、维护)。例如洗衣服。
3.3安全性
Java 要适用于网络/分布式环境。为了实现这个目标,安全性颇受重视。使用 Java 可以构建防病毒、防篡改的系统。从一开始 Java 就设计成能够防范各种攻击 , 其中包括 :①运行时堆栈溢出(蠕虫和病毒常用的攻击手段)、②破坏自己的进程空间之外的内存、③未经授权读写文件 。
3.4健壮性
Java 非常强调进行早期的问题检测、后期动态的(运行时)检测,以及消除容易出错的情况 …
Java 编译器能够检测许多在其它语言中仅在运行时才能检测出来的问题。至于第二点,对于曾经花费几小时来检测由于指针 Bug 而引起内存冲突的人来说,一定很喜欢 Java 这一特性。目前许多第三方交易系统、银行平台的前台和后台电子交易系统等都会用 Java 语言开发。
3.5可移植性
Java 并不依赖平台,用 Java 编写的程序可以运用到任何操作系统上;一次编译,到处运行。(例如,Java 中的 int 永远为 32 位的整数,而在 C/C++ 中,int 可能是 16 位整数、32 位整数,也可能是编译器开放商指定的任何其他大小)。
3.6高性能
字节码可以 ( 在运行时刻 ) 动态地翻译成对应运行这个应用的特定 CPU的机器码。
3.7多线程
多线程可以带来更快的交互响应和实时行为。
3.8分布式
Java 有一个丰富的例程库,用于处理像 Http 和 Ftp 之类的 TCP/IP 协议。Java 应用程序能通过 URL 打开和访问网络上的对象,其便捷程度就好像访问本地文件一样。
3.9解释与编译并行
Java 程序(后缀名为 .java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀名为 .class 的文件),然后可以在实现这个 Java 平台的任何系统中运行。精心设计的字节码不仅可以很容易的在任何机器上解释执行,而且还可以动态的转换为本地机器代码。