[Java · 初窥门径] Java 语言初识
🌟 想系统化学习 Java 编程?看看这个:[编程基础] Java · 学习手册
0x01:Java · 编程语言简介
Java 是一种高级计算机编程语言,它是由 Sun Microsystems 公司(已被 Oracle 公司收购)于 1995 年 5 月推出的一种可以编写跨平台应用软件、完全面向对象的程序设计语言。
0x0101:Java · 诞生史 — 从机顶盒到改变世界的编程语言
Java 的诞生史要追溯到 1991 年,由 Patrick Naughton 及其伙伴 James Gosling(被誉为 “Java之父” )带领的 Sun 公司的工程师小组想要设计一种小型的计算机语言,主要是面向有线电视转换盒这类的消费设备。
由于这些消费设备的处理能力和内存都很有限,所以要求语言必须非常短小且能够生成非常紧凑的代码。另外,由于不同的厂商会选择不同的中央处理器(CPU),因此这种语言的关键是不能与任何特定的体系结构捆绑在一起。这个项目起初被命名为 “Green”。
为满足消费电子设备的严苛要求,这种新语言必须具备 代码精简、运行高效 的特性,同时实现 跨平台兼容 —— 即同一套代码无需修改即可在不同硬件架构上运行。尽管 Sun 团队拥有深厚的 UNIX系统开发背景,但鉴于 C++ 在 跨平台能力 与 内存管理 上的局限性,他们决定以 C++ 语法为基础进行改良重构。
在 James Gosling 的主导下,新语言初步定名为 Oak(灵感源自其办公室窗外的一棵橡树),意在体现其如同橡树般稳健可靠的特性。然而,当准备对外发布时,团队发现 "Oak" 已被其他编程语言占用,最终更名为 Java —— 这个名字既暗合开发团队对咖啡文化的热爱(Java是印尼著名咖啡产地),又隐喻着新语言能为开发者带来如咖啡般提神的高效编码体验。
0x0102:Java · 发展史 — Java 版本迭代史
Java 语言发展到今天经历了一系列的过程 (同时扫盲一波 Java 8 & Java 1.8):
-
1991 年:SUN 公司的 Green 项目,Oak 诞生
-
1995 年:推出 Java 测试版
-
1996 年:JDK 1.0 — JDK(Java 开发工具包)
-
1997 年:JDK 1.1
-
1998 年:JDK 1.2,大大改进了早期版本缺陷,是一个革命性的版本,更名为 Java2
-
2004 年:J2SE 5.0(1.5.0)Tiger 老虎称为 Java 语言发展史上的又一里程碑,为了表示该版本的重要性,J2SE 1.5 更名为 Java SE 5.0
-
2005 年:Java 的各种版本进行更名,以取消其中的数字 “2”,J2ME 更名为 Java ME,J2SE 更名为 Java SE,J2EE 更名为 Java EE。
-
2006 年:Java SE 6.0(1.6.0)
-
2009 年:甲骨文(Oracle)收购 SUN,交易额高达 74 亿
-
2011 年:JavaSE 7.0(1.7.0)
-
2014 年:JavaSE 8.0(1.8.0) - 长期支持
-
2017 年:Java 9.0
-
2018 年 3 月:Java 10
-
2018 年 9 月:Java 11 - 长期支持
-
2019 年 3 月:Java 12
-
2019 年 9 月:Java 13
-
2020 年 3 月:Java 14
-
2020 年 9 月:Java 15
-
2021 年 3 月:Java 16
-
2021 年 9 月:Java 17 - 长期支持
-
2022 年 3 月:Java 18
-
2022 年 9 月:Java 19
-
2023 年 3 月:Java 20
-
2023 年 9 月:Java 21,9 月 19 日,以六个月为更新频次的 Java 正式发布了最新的长期支持版本 — Java 21,这一版本将获得官方 5 年的重要支持,这意味着对于开发者、企业而言,如果想要用上稳定而前沿的 Java,JDK 21 无疑是最好的选择。
-
2024 年 3 月:Java 22
Java · 知识扫盲:
Java 1.8 & Java 8 Java 1.8.0 & Java 8 其实是一样的 😂。得益于 Java 神奇的版本迭代机制,搞乱了一堆初学者。
Java · 学习建议:关于 Java 学习版本的选择
从 Java 的版本迭代史可以看出来,Java 的版本更新非常的快。对于我们初学者而言,笔者建议学习那些长期支持的版本,比如 8、11、17、21 版本。另外,对于语言的学习我们一开始并不推荐追求最新版,有以下几点考量:
编程语言的基础语法很难改动 => 学了低版本的基础语法你到高版本仅仅是换个版本的事情。
新版本生态环境尚未搭建 => 新版本刚推出,参考资料比较少,除了 Bug 很难排查。
0x0103:Java · 体系结构 — SE & EE & ME
针对不同开发市场,Sun 公司将 Java 划分为 3 个技术平台(体系结构):
-
Java SE(Java Standard Edition):标准版,定位在个人计算机上使用
-
Java EE(Java Enterprise Edition):企业版,定位在服务器端的应用
-
Java ME(Java Micro Edition):微型版,定位在消费性电子产品的应用上
1. Java SE — 标准版 Java 技术平台
适用场景: 开发普通桌面和商务应用程序
这个版本是 Java 平台的核心,它提供了非常丰富的 API 来开发一般个人计算机上的应用程序,包括用户界面接口 AWT 及 Swing,网络功能和国际化、图像处理高能力以及输入输出支持等。
在上个实际 90 年代末互联网上大放异彩的 Applet 也属于这个版本。Applet 后来被 Flash 取代,而 Flash 现在也被 HTML5 取代了。
2. Java EE — 企业版 Java 技术平台
适用场景: 开发企业级应用程序
JavaEE 是 JavaSE 的扩展,增加了用于服务器开发的类库。如:JDBC 让程序员能直接在 Java 内使用SQL 的 语法来访问数据库内的数据;Servlet 能够延伸服务器的功能,通过 请求-响应 的模式来处理客户端的请求;JSP 是一种可以将 Java 程序代码内嵌在网页内的技术。
3. Java ME — 微型版 Java 技术平台
适用场景: 开发电子消费产品和嵌入式设备
JavaME 是 JavaSE 的内伸,包含 J2SE 的一部分核心类,也有自己的扩展类,增加了适合微小装置的类库:javax.microedition.io.*
等。该版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。
0x0104:Java · 语言特性
笔者备注:没有最牛逼的语言,只有最适合的语言 !!
下面是 Java 的特性与优势,简而言之,Java 牛逼!!!
-
跨平台/可移植性: Java 通过 JVM(Java Virtual Machine,Java 虚拟机)以及字节码实现跨平台性。Java 程序由 Javac 编译器编译为字节码文件(
.class
文件),JVM 中的 Java 解释器会将字节码文件翻译成所在平台上的机器码文件,执行对应的机器码文件就可以了。Java 程序只要一次编写,就可到处运行。 -
安全性:
-
Java 的存储分配模型可以防御恶意代码攻击。
-
Java 没有指针,外界不能通过伪造指针操作存储器。
-
Java 编译器在编译程序时不显示存储安排策略,程序员不能通过查看声明猜测出类的实际存储安排。
-
Java 程序的存储是在程序运行时由 Java 解释程序决定的。
-
-
面向对象: 面向对象是一种程序设计技术,非常适合大型软件的设计与开发。由于 C++ 为了照顾大量 C 语言使用者而兼容了 C,使得自身仅仅成为了带类的 C 语言,多少影响了其面向对象的彻底性!而 Java 是完全的面向对象的语言。
-
简单性: Java 使用引用代替指针,并提供了自动垃圾回收机制,使程序员不必担心内存管理。
-
高性能: Java 最初发展阶段,总是被人诟病 ”性能低“;客观上,高级语言运行效率总是低于级语言的,这个无法避免。Java 语言本身发展中通过虚拟机的优化提升了几十倍的运行效率。比如,通过 JIT(JUST IN TIME)即时编译技术提高运行效率。将一些 ”热点“ 字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。这样的话,使 Java 程序的执行效率大大提高,某些代码甚至接近 C++ 的效率。
-
分布性: Java是为 Internet 的分布式环境设计的,因为它能够处理 TCP/IP 协议。事实上,通过URL 访问一个网络资源和访问本地文件是一样简单的。Java 还支持远程方法调用(RMI,Remote Method Invocation),使程序能够通过网络调用方法。
-
多线程: 多线程的使用可以带来更好的交互响应和实时行为。 Java 多线程的简单性是 Java 成为主流服务器端开发语言的主要原因之一。
上面虽然罗列了 Java 这么多的好,但是并不是说它就是万能的,每种语言都有自己适合的赛道,没有最好,只有最适合。一个简单的例子,C 的性能很好,但是语法复杂。Python 性能比 C 慢多了,但它学起来 Easy,所以 Python 对小白来说肯定优于 C。
0x02:Java · 学习它的意义?
我们学习一门语言,不应为是为了学而学,而应该知道,我为啥要学它?学了它之后我能干什么?目前市场上主流的开发有以下几类,Java 都可以做,但是咱们讲究一个合适:
-
桌面应用开发: Java 是能写桌面程序的,但目前桌面 C# 比较流行。
-
企业级应用开发: 微服务、大型互联网应用。(主流)
-
移动应用开发: 目前安卓、鸿蒙这些比较火,但 Java 也可以做。
-
服务器系统: 各种应用的后台。(主流)
-
大数据开发: hadoop。(主流)
-
游戏开发: 能做,但不是主流。
0x03:Java · 核心机制 — 垃圾回收(了解)
这部分是提升阶段,如果你之前学过其它的编程语言,那么对 Java 的这个机制会了解的比较深刻。对于小白而言,了解即可(应对应对面试)。
”垃圾回收“ 机制是 Java 的一个核心机制,这里的 ”垃圾回收“ 是指 清除不再使用的对象。Java 中有一个系统级的垃圾收集器,我们管它叫 Garbage Collection - GC。
每当一个对象被创建,GC 就会盯着这个对象,看它啥时候不用,一旦它后续没人用了,GC 就自动给它干掉了。不像 C++,扫垃圾还得自己动手写程序。
自动是挺好的,但是因为自动,所以程序员是无法对其进行精确控制和干预的。
0x04:Java · 核心机制 — 跨平台原理(掌握)
跨平台 泛指程序语言、软件或硬件设备可以在多种作业系统或不同硬件架构的电脑上运作。
Java 通过 JVM(Java Virtual Machine,Java 虚拟机)以及字节码实现跨平台性。
Java 程序由 Javac 编译器编译为字节码文件(.class
文件),JVM 中的 Java 解释器会将字节码文件翻译成所在平台上的机器码文件,并执行对应的机器码文件。所以 Java 程序只要一次编写,就可到处运行(要运行的机器上安装对应平台的 JVM 即可):
上面提到的那么多工具(javac
、java.exe
、JVM
),你只需要安装一个 JDK,就全部都有了。
JDK(Java Development Kit,Java 开发工具包)是 Oracle 官方提供的 Java 核心开发套件,包含开发、编译、调试和运行 Java 程序所需的所有工具和库,它是 Java 开发者必须安装的基础环境(从下一章开始我们就要配置 JDK 了)。