Java 简介
Java 简介
共勉
不要哀求,学会争取。若是如此,终有所获。
原文
一、前言
本章节中,主要介绍 Java
中的主要特性和发展历史。以及作为新手,日常学习中对 Java
语言的误解。
二、主要特性
1. 简单性
语法类似于 C++
语言,方便大多程序开发者能够简单地学习和实践。此外,抛弃了 C++
中复杂的语言特性,如操作符重载、多继承、自动强类型转换等,降低了程序开发者上手难度。Java
中移除了指针的概念,也提供了内容空间的自动分配与回收,使得内存管理也更加方便。
2. 面向对象
面向对象是一种程序设计技术,将重点从过程集中到对象和对象的接口上。Java
提供类、接口和集成等面向对象的特性,抛弃了类之间复杂的多继承,仅支持单继承,但同时支持接口的多继承。
3. 分布式
Java
拥有丰富的类库,可处理 HTTP
和 FTP
类的协议请求。因此,Java
能够访问和打开网络上的资源,开发网络应用。
4. 健壮性
Java
中,没有了 C++
中类的多继承、指针等概念。同时它的强类型机制、异常处理机制、垃圾回收机制等都为 Java
程序的健壮性提供了重要保障。
5. 安全性
开发网络应用时,安全性十分重要。利用 Java
的诸多安全特性能够构建防病毒、防篡改系统。
6. 体系结构中立
Java
源代码经编译后成为字节码,字节码能够在实现了 Java
虚拟机的各种系统中运行,无视系统差异。
7. 可移植性
正是由于 Java
的体系结构中立,才有了适合分发和高度可移植的特点。
8. 解释型
Java
经编译后形成字节码文件,然后由虚拟机来解释这些字节码并执行,因此说 Java
是一门解释型语言。
9. 高性能
相比于其他编译型编程语言,Java
性能毋庸置疑,同时,引入即时编译器,其性能已经和 C++
相差不大,在某些场景下甚至更胜一筹。
10. 多线程
大量请求的场景下,单线程的交互响应和实时行为变得十分缓慢。随着摩尔定律的终结,多线程的引入,无疑会带来更加快速的交互响应和实时行为,大大提升体验。
11. 动态性
随着各种应用场景的不断涌现,Java
也在动态适应变化的环境。Java
中所需的类既能动态加载到内存中,也能通过网络来载入,也更有利于软件的迭代升级。
三、发展简史
1990 年代初,Sun
公司的詹姆斯·高斯林等人为了实现电视机、电话、闹钟等家用电器的控制和通信,开发了一套用于设置在家用电器等小型系统中的编程语言。在当时,这门语言被命名为 Oka
。但由于市场需求不高,所以该计划被逐渐放弃。
随着 1990 年代互联网的发展,Sun
公司发现 Oka
语言在互联网中的应用前景广泛。于是决定对 Oka
进行改造,并在 1995 年 5 月以 Java
的名义正式发布。
随着互联网的迅猛发展,Java 也得以逐渐成为重要的网络编程语言,詹姆斯·高斯林也被大家公认为 Java
之父。
到了 2009 年, Sun
公司被 Oracle
公司所收购,自此 Java
成为 Oracle
公司的一大产品直至今日。
以下是截止到本文写作时间 Java
的历史年表,累计经过了 21 次主要版本更新,目前来到了 JDK
21。不过虽然 Java
已经经历了这么多版本的更新,但国内目前用的最多的应该还是 JDK
1.8 版本。而出于对稳定性的考虑,企业开发更喜欢 LTS
版本,这也是为什么至今 JDK
1.8 还占有如此高的市场比例。
版本 | 发布日期 | 主要事件 |
---|---|---|
JDK Beta | 1995 | Java 语言发布,用 Java 实现的浏览器和 Java Applet 被大量应用 |
JDK 1.0 | 1996 年 1 月 | 奠定了 JDK 、JRE 、JVM 的体系结构 |
JDK 1.1 | 1997 年 2 月 | 加入 JIT ,提升 JDK 效率 |
J2SE 1.2 | 1998 年 12 月 | 确立 J2SE 、J2EE 、J2ME 产品结构 |
J2SE 1.3 | 2000 年 5 月 | 内置 HotSpot JVM |
J2SE 1.4 | 2002 年 2 月 | XML 处理、断言、支持正则表达式 |
J2SE 5.0 | 2004 年 9 月 | 静态导入、泛型、for-each 循环、自动拆,装箱、枚举、可变参数 |
JDK 6 | 2006 年 12 月 | 提供动态语言支持、同步垃圾回收 |
JDK 7 | 2011 年 7 月 | 字符串的 switch 语句、多异常捕抓 |
JDK 8 (LTS) | 2014 年 3 月 | Lambda 表达式 |
JDK 9 | 2017 年 9 月 | 轻量级 json API 、垃圾收集机制更新 |
JDK 10 | 2018 年 3 月 | 局部变量类型推断,Java 后续版本快速迭代更新 |
JDK 11 (LTS) | 2018 年 9 月 | 常用类增强,JDK 11 是继 JDK 8 之后的首个长期支持本版 |
JDK 12 | 2019 年 3 月 | switch 表达式增强 |
JDK 13 | 2019 年 9 月 | 文本块支持 |
JDK 14 | 2020 年 3 月 | instanceof 支持模式匹配 |
JDK 15 | 2020 年 9 月 | EdDSA 数字签名算法、 密封类、隐藏类 |
JDK 16 | 2021 年 3 月 | 启用 C++ 14 语言特性、向量 API |
JDK 17 (LTS) | 2021 年 9 月 | 恢复总是严格的浮点语义、增强型伪随机数生成器 |
JDK 18 | 2022 年 3 月 | 默认 UTF-8 编码、代码片段、简单的网络服务器 |
JDK 19 | 2022 年 9 月 | 记录模式、外部函数与内存 API 、Linux /RISC-V 移植、虚拟线程、结构化并发 |
JDK 20 | 2023 年 3 月 | 1. 作用域值 2. 记录模式 3. switch 模式匹配4. 外部函数和内存 API 5. 虚拟线程 6. 结构化并发 7. 向量 API |
JDK 21(LTS) | 2023 年 9 月 | 1. 分代 ZGC 2. 序列集合 3. 弃用 Windows 32 位 x86 4. 密钥封装机制 API 5. 字符串模板 6. 未命名类和实例主方法 |
四、常见误解
1. JavaScript 是 Java 的子集
两个东西完全不沾边,JavaScript
是一种可以在网页中使用的脚本语言,而 Java
是完全的强类型语言,两者除了名字很像,其他方面可以说没有一点关系。
2. Java 是解释型语言,所以效率较低
早期版本的 Java
的确是解释型的,但随着 Java
虚拟机中采用了即时编译器,其性能已经和 C++
相差不大,在某些场景下甚至更胜一筹。
⏳ 联系
想解锁更多知识?不妨关注我的微信公众号:村雨遥(id:JavaPark)。
扫一扫,探索另一个全新的世界。