1. Java版本的历史

Java 的历史始于 1991 年,当时一群 Sun 程序员决定为小型设备创建一种语言:电视遥控器、咖啡机、烤面包机、银行卡等。

这些设备的制造商使用非常不同的处理器来控制他们的产品,因此绑定到特定处理器或操作系统的架构变得非常重要。

Java 的创造者决定将问题分为两部分:他们的程序不会被编译成特定处理器的机器代码,而是被编译成特殊的中间代码。反过来,该中间代码将由称为虚拟机的特殊程序执行。

大多数程序员将计算机称为机器。

有趣的。

C++ 被作为 Java 语言的基础,并被大大简化和标准化。如果 C++ 允许您以 10 种方式做某事,那么 Java 只保留其中一种。在某些方面,这就像从象形文字到字母表的过渡。

Java 的第一个版本于 1996 年发布。从那时起,Java 开始了它在世界范围内的胜利进军,这反过来又刺激了该语言本身的发展和成长。今天,数百万个库和数十亿行代码是用 Java 编写的,并且每 6 个月发布一次新版本的 Java:

姓名 班级数
JDK 1.0 1996年 211
JDK 1.1 1997 477
J2SE 1.2 1998 1,524
J2SE 1.3 2000 1,840
J2SE 1.4 2002年 2,723
J2SE 5.0 2004年 3,279
Java SE 6 2006年 3,793
Java SE 7 2011年 4,024
Java SE 8 2014 4,240
Java SE 9 2017年 6,005
Java SE 10 2018 6,002
Java SE 11 2018 4,411人
Java SE 12 2019 4,433
Java SE 13 2019 4,515

尽管 Java 的版本是定期发布的,但它们对程序员的意义并不相同:Java 的发展时断时续。


2.Java 2

第一次重大飞跃发生在 JDK 1.2 的发布时。它在那里有如此多的创新,以至于 Java 的创建者将其重新命名为Java 2 Platform Standard Edition或简称为 J2SE 1.2。

主要创新是:

  • strictfp关键词
  • 用于处理图形的 Swing 库
  • JIT 编译器,它加速了 Java 程序的执行
  • 大量的收藏
  • 完整的 Unicode 支持:日文、中文和韩文。

今天,这些创新似乎没有那么大,但每个大项目都是从小项目发展而来的。如果 20 年前没有一小群程序员不断改进这门语言,Java 就不会在今天如此流行。


3.Java 5

JDK 1.5 于 2004 年 9 月发布,它也引入了很多创新,因此不由得换了个新名字:他们决定使用 5.0、6.0 和 7.0,而不是 1.5、1.6 和 1.7 版本。所以,JDK 1.5 的全称是Java 2 Standard Edition 5.0

此更新包括一些内容,如果没有这些内容,语言的进一步发展是不可能的。

注释。从 Spring 和 Hibernate 到 JUnit,半数主要的现代框架都是基于注解构建的。

泛型。泛型将集合(以及更多)的力量提升到了新的高度。代码变得更简单、更紧凑、更安全。

自动装箱/拆箱是原始类型与其包装类型之间的自动转换。这使得编写和阅读代码变得更加容易,并使集合更加流行。

循环现在至少占程序员编写的所有循环的一半foreach而且,当然,在处理集合时它是必不可少的。

枚举是另一个不错的新特性它可以让很多事情得到精美的简化。

这些并不是所有的创新:添加了数百个新类。重要的是它们是正确的创新,并且再次有力地推动了 Java 的普及。


4. Java 6

Java 6 因大量小的改进和名称中数字 2 的放弃而被人们记住:它不再是“Java 2 Standard Edition 6.0”,而只是“Java Standard Edition 6.0”。

以下是一些有趣的创新:

Java编译器 API使得直接从代码调用Java 编译器成为可能。这意味着您的程序现在可以生成表示类代码的文本,通过调用Java Compiler API的方法对其进行编译,然后立即开始调用已编译类的方法。在整个发展领域,这种能力极大地简化了生活。

在 Java 程序中直接执行JavaScript成为可能。这个特性的出现是因为 JavaSE 6 包含了 Rhino JavaScript 引擎。


5.Java 7

Java 7 于 2011 年 7 月发布,本应有很多改进,但程序员只添加了计划中的一小部分。特别是,他们添加了以下内容:

用于处理数据输入和输出的新库。称为New Input Output API,它位于java.nio包中。

Java 编译器在编译时的自动类型推断让程序员编写更少的代码。编译器变得更聪明了,而这仅仅是个开始。

switch 语句获得了使用字符串作为 case 值的能力。

自动资源管理也得到了显着改善:有了这种try-with-resources结构,Java 程序可以在不再需要时为您关闭数据流。

还有很多其他的变化,但在我们目前学习Java的阶段,它们并不是那么重要。


6. Java 8

Java 8 于 2014 年 3 月发布,是 Java 最近最强大的更新。

最重要的是,程序员记住它是因为它添加了 lambda 表达式和功能接口(注解@FunctionalInterface)。我们将在第 21 级检查它们。您的代码将不再相同。

还为集合添加了流,结合 lambda 表达式,可以更紧凑地编写代码。尽管并不总是更具可读性。

有趣的。

第三个重大变化是 Java 8 引入了用于处理日期和时间的全新 API — Date Time API。我们会在不久的将来研究它。


7. Java 9

Java 9 于 2017 年 9 月发布。从那时起,Java 的创建者决定更频繁地发布新版本——每六个月发布一次。他们可能对 Google Chrome 浏览器开发人员采用的方法印象深刻。

Java 9 版本更侧重于 Java 机器的内部结构。它给普通程序员带来的最重要的东西是能够将程序划分为模块。当你有数万个类或者你的代码动态卸载插件时,这非常方便。

但在不久的将来,它可能对我们没什么用处。


8.Java 11

Java 9 发布六个月后,Java 10 出来了,又过了六个月,Java 11 出来了。

这段时间做了很多小的改进,但你很可能只记得两个:

它增加了对 Unicode 10 的支持。现在您可以在 Java 程序中使用表情符号。您可以像使用布尔类型一样使用它们:

改进了类型推断,并且出现了您一定会喜欢的var关键字。

现在您可以编写以下内容:

var str = "Hello";

编译器将其转换为:

String str = "Hello";

但也有一些损失。Java 的创建者从 JDK 11 中删除了 JavaFX、Java EE 和 CORBA 等库。


9.兼容性的重要性

发布新版本时,程序员通常希望从头开始。毕竟,当他们绝对肯定代码从一开始就应该如何编写时,谁愿意修复一堆旧错误?

但历史并不支持这种做法。每当程序员发布程序的新版本时,其 90% 的用户都在使用旧版本。他们可以使用或忽略该程序的新功能,但用户讨厌的是过去运行良好的功能停止运行。

当程序员发布不兼容的新版本时,许多伟大的产品就死了。或者只是在他们做出重大改变时。例如,在 Windows 8 中放弃“开始”按钮的想法并没有吸引用户。Windows 10 的发布带回了 Window 8 中删除的一半内容。

此外,Windows 允许您运行 20 年前为 Windows 95 编写的程序,甚至 30 年前为 MS DOS 3.0 编写的程序——它们都可以运行。这是 Windows 仍然流行的原因之一。

如果 Java 的开发人员不关心兼容性,Java 就不会像现在这样流行。每当有新版本的 Java 机器、新版本的 SDK 或类的重大更改时,自 1996 年 1 月以来编写的所有 Java 代码都可以继续工作。

这通常通过仅添加新方法、类和包而不删除任何内容来实现。这种方法有其优点和缺点。

一方面,Java 以旧的、次优的和不必要的代码的形式拖着一堆包袱。另一方面,您用 Java 11 编写的项目始终可以使用一个用 Java 8 编写的库,该库使用用 Java 5 和 Java 2 编写的库。这种大杂烩代码可以正常工作。

对于 C++ 语言,为 32 位和 64 位平台编译的库不能在同一个项目中使用。char如果你突然发现一个库中使用的类型使用一个字节,而另一个库使用两个字节,你会非常头疼。


10.弃用

因此,Java 的创建者决定不删除任何东西,而只是添加新的类和包。但是他们如何让程序员知道现有的次优解决方案有一个新的有价值的替代方案?

为此,他们想出了注释@Deprecated

如果不赞成使用某些方法或类,则会在其声明旁边添加此注释。这意味着不鼓励程序员使用代码。

您仍然可以使用已弃用的类或方法,但不建议这样做。

人们多久做一次不被推荐的事情?几乎总是🙂

许多类已被弃用 20 年——它们已经被使用并且仍在使用。人们熟悉它们或者它们只是方便。但是它们有可能在某个时候被移除,所以最好不要使用它们。

所有现代 IDE,包括 IntelliJ IDEA,都可以处理@Deprecated注释。已弃用的类和方法的名称使用删除线格式显示。是这样的:

Date date = new Date();
int day = date.getDay();

弃用的类非常流行并且经常在代码中找到,所以我们很快就会看到其中的一些。