Java 于 1996 年第一次发布,引起了人们极大的兴趣。关注 Java 的人不仅限于计算机出版界,还有诸如《纽约时报》、《华盛顿邮报》和《商业周刊》这样的主流媒体。Java 是唯一一个在 National Public Radio 上占用了 10 分钟时间进行介绍的程序设计语言,且得到了 100 000 000 美元的风险投资资金。
对比于 C++,Java 没有指针、结构、联合、操作符重载(可惜了)、虚基类等复杂语法,是独立于但又参考借鉴了 C++ 的一种新语言。
另外,Java 的目标之一是支持在小型机器上的软件开发,其基本解释器和类大小仅有 40KB,算上基础的标准类库和线程支持也仅需要 175 KB。这样的“小”也体现了 Java 的简单。
Java 面向对象的技术非常成熟,与 C++ 旗鼓相当。且没有多重继承,取代之的是接口概念。
Java 有丰富的例程库,用于处理网络协议(TCP / IP),处理网络对象时的便携程度就如同访问本地文件一般。
Java 编译器非常智能,能够检测许多运行时才可能出现的问题。另外,由于没有指针,不会存在内存问题。
Java 一开始便设计为能够防范各种攻击的语言,包括:
尽管发展途中仍遭遇了一些 bug,但时至今日 Java 已经足够值得信赖。
Java 创新性地采用了虚拟机机制,编译器将 Java 代码生成为字节码(.class 文件),由虚拟机负责在不同平台上运行相同的效果。
尽管解释虚拟机指令肯定比全速运行机器指令慢很多,但 Java 虚拟机有一个选项,可以将执行最频繁的字节码序列转换成机器码,这一过程称为 即时编译。
Java 明确规定了基本数据类型的大小和运算,例如 int 明确指定为 32 位。不同于 C++ 中的 int 取值是一个范围,即,可能是 16 位或者 32 位。这种做法消除了 C++ 代码移植时的一大困难。
Java 解释器可以再任何移植了解释器的机器上直接执行 Java 字节码。
但对比于 Python 这种解释性语言,直到 Java 9 才提供了 jshell 工具来支持快捷交互的编程。
现在的 Java 即时编译器已经可以与传统的编译器相媲美,甚至在某些情况下性能超越了传统编译器。
主要原因是及时编译器拥有更多的代码信息,能够合理优化代码,提高运行效率。
在设计之初,Java 超前地支持并发程序设计。
Java 能够在运行程序时增加代码,Java 库能够自由地添加新方法和实例变量,而对客户端没有任何影响。
1991 年,Sun 公司的一个工程师小组计划设计一种小型计算机语言 “Oak”,用于有线电视转换盒之类的消费设备,项目名称为 “Green”。由于目标设备往往计算能力和内存均有限,因此该语言必须非常小,且效率高。另外,由于设备的不同厂商选择的中央处理器(CPU)不同,因此该语言还需求跨平台。后来 Sun 公司发现已经有另外一个计算机语言取名为 Oak,因此改名为 Java。
1992 年,Green 项目发布了第一个产品 “*7”,能够提供智能的远程控制。但 Sun 公司对该项目不感兴趣,因此 Green 项目组投标了一个设计有线电视盒的项目,但遗憾没能拿到合同。
1993 年,Green 项目更换名称为 “First Person” 公司,并寻求买家购买自己的技术,但一直没能找到,于 1994 年解散了。在当时,Internet 的万维网日渐发展壮大,人们主要使用伊利诺伊大学超级计算中心的一个非商业化 Web 浏览器 Mosaic。Sun 公司使用 Java 开发新的浏览器 HotJava,能够在网页中执行内嵌的 Java 代码,用来展示 Java 语言的强势能力,并于 1995 年在 SunWorld’95 大会上展示,引发了人们对 Java 的狂热追逐。
1996 年,Sun 公司发布了 Java 第 1 个版本,但 Java 1.0 并不能很好地用来完成应用开发,后来推出的 Java 1.1 弥补了第 1 版的大部分缺陷,大大改进了反射能力,并为 GUI 编程添加了新内容,但仍有很大的局限性。
1998 年,JavaOne 会议上发布了 Java 1.2 版本,完善了之前玩具式的 GUI 和图形工具包。发布仅 3 天后,Sun 公司将 “Java 1.2” 改名为 “Java 2 标准版(Standard Edition,JAVA SE)软件开发包 1.2 版” 以吸引眼球。除了标准版之外,Sun 公司还推出了另外两个版本:用于手机等嵌入式设备的“微型版”(Micro Edition,Java ME)和用于服务器端处理的“企业版”(Enterprise Edition,Java EE)。此后的 1.3 和 1.4 版本对 Java 2 做出了增量式的改进,提供了不断扩展的标准类库,并提高了性能,同时修正了一些 bug,Java 逐渐成为服务器端应用的首选平台。
2004 年,Java 1.5 版推出,但在当年的 JavaOne 会议后直接改为 Java 5.0 版本。Java 5.0 添加了泛型类型,且受到 C# 语言的启发,添加了 “for each” 循环、自动装箱和注解。
2006 年,Java 6(没有后缀 .0)于年底发布,该版本没有对语言进行修改,而是提高了性能并增强了类库。
2009 年,Sun 公司被 Oracle 公司收购,Java 开发因此停滞,直至 2011 年,Java 7 发布,但只进行了一些简单的改进。
2014 年,Java 8 发布,添加了 “函数式” 的编程方式,能够轻松地表述能并发执行的计算。
2017 年,Java 9 发布,实现了 “模块” 系统。该 “模块” 系统最早于 2008 年提出,耗时 11 年实现,该版本同时提供了一些新特性。
2018 年后,Java 每半年就会发布一个新版本,并且每过一段时间,会将某个版本(Java 11、Java 17)指定为长期支持版本,而中间版本会提供一种试验新特性的机制。
表 1-1 展示了 Java 语言及类库的演进。
版本 | 年份 | 新语言特性 | 类与接口的数量 |
---|---|---|---|
1.0 | 1996 | 语言本身 | 211 |
1.1 | 1997 | 内部类 | 477 |
1.2 | 1998 | strictfp 修饰符(目前已被弃用) | 1524 |
1.3 | 2000 | 无 | 1840 |
1.4 | 2002 | 断言 | 2723 |
5.0 | 2004 | 泛型类、“for each” 循环、可变参数、自动装箱、元数据、枚举、静态导入 | 3279 |
6 | 2006 | 无 | 3793 |
7 | 2011 | 基于字符串的 Switch 语句、菱形运算符、二进制字面量、异常处理增强 | 4024 |
8 | 2014 | Lambda 表达式、包含默认方法的接口、流和日期/时间库 | 4240 |
9 | 2017 | 模块、其他的语言和类库增强 | 6005 |
11 | 2018 | 局部变量类型推导(var)、HTTP 客户端、移除 Java FX、 JNLP、Java EE 重叠模块和 CORBA | 4410 |
17 | 2021 | Switch表达式、文本块、instanceof 模式匹配、记录、密封类 | 4859 |
没啥误解,谢谢!
Java SE:Java Standard Edition
Java 平台的标准版,应用于桌面环境。
Java EE:Java Enterprise Edition
Java 平台的企业版,应用于基于 Java 的应用服务器。
Java ME:Java Micro Edition
Java 平台的微型版,应用于移动、无线及有限资源的环境。
SDK:Sofare Develop Kit
软件开发工具包,用于帮助开发人员的提高工作效率,不同类型的软件开发都有自己的 SDK。
JVM:Java Virtual Machine
运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,给出相同的结果。
JRE:Java Runtime Environment
Java 运行时环境,是运行已编译 Java 程序所需的所有内容的集合。主要包括 Java 虚拟机(JVM)、Java 基础类库(Class Library)。
JDK:Java Development Kit
功能齐全的 Java SDK,提供给开发者使用,能够创建和编译 Java 程序。包含了 JRE,同时包含了编译 Java 源码的编译器 javac 以及一些其他工具,比如 javadoc(文档注释工具)、jdb(调试器)、jconsole(基于 JMX 的可视化监控⼯具)、javap(反编译工具)等等。