从零开始学 Java 系列之 Java 是什么?它到底是个啥?
全文大约【5000】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!文章带有丰富案例及配图,只为让你更好的理解和运用文中的技术概念,给你带来具有足够的思想启迪......
------------------------------ 前戏已做完,精彩即开始 ----------------------------
既然各位小伙伴现在已经决定要学习 Java 了,那首先得对 Java 有基本的了解吧,所以接下来壹哥先用一篇文章,来给大家介绍一下 Java 到底是个啥。
友情提示:
大家要记住,无论我们学习任何技术,都要知道这个技术是什么、干嘛的、怎么用、为什么这么用,以及使用时出现了问题该怎么解决!
一. Java 简介
1. 起源
既然各位打算以后要靠 Java 来养家糊口了,那对 Java 的了解是不是应该更多一些呢?比如 Java 这个技术是怎么产生的?接下来壹哥给大家讲个小故事,让咱们一起来看看 Java 的起源吧。
20 世纪 90 年代,经济高速发展,大家有钱了就想追求更高的生活品质。当时发明了很多稀奇古怪的电子产品,比如有钱人必备的 “大哥大”、BB 机、电视机顶盒、烤箱等。我们知道,硬件产品必须要有软件系统进行支撑才能运行,就好比人必须有灵魂才能称之为人。所以当时为了配合硬件的发展,研发出了著名的单片机系统,这就大幅提升了电子产品的智能化程度。
当时有一个叫做 “Sun”(不是 Son 哦) 的公司,眼光很敏锐。为了抢占广大的消费电子产品市场,在 1991 年成立了一个名为 “Green” 的项目组,由詹姆斯・高斯林 (高司令)、帕特里克等几个工程师一起负责研发新技术,专攻家电产品里的嵌入式应用开发。一开始 Green 项目组打算用 C++ 进行嵌入式开发,但由于 C++ 写出来的程序特别复杂和庞大,不适合在嵌入式的环境中运行。而且不同厂家生产的电子产品,其底层所使用的硬件系统也各有不同,C++ 写出来的东西无法实现 “一次编码,处处运行” 的跨平台需求。
所以为了解决以上这些问题,Green 项目组根据嵌入式的特点,对 C++ 进行了改造,去除了 C++ 中不太实用及影响安全的部分,并针对实时性要求,开发出一种称为 Oak(橡树) 的面向对象语言。但此时 Oak 除了比 C++ 更简单之外,其实也没有太大的区别,所以当时的硬件厂商对 Oak 没有太大的热情。而 Oak 也就因为缺乏硬件的支持无法进入市场,从而被搁置了下来。
到了 1994 年 6、7 月间,Green 团队决定改变接下来的发展目标。因为 Oak 本身是一种精简的语言,程序非常小,很适合在网络上传输,所以他们决定把 Oak 用在万维网上。到了 1995 年,Sun 公司正式决定启用 Oak,并推出了可以随同网页在网络上传输的 Applet 技术。
结果就在此时,Sun 公司发现 Oak 这个商标被别的公司给提前抢注了。所以没办法,只能将 Oak 重新改名!大家都知道,取名字是一个很令人抓狂的事,大家一时都找不到合适的名字来重新命名。在 “百思不得解” 之际,当时正在喝 82 年爪哇岛咖啡的詹姆斯・高斯林灵机一动,干脆就把 Oak 改名叫 “Java” 得了。于是,从此 Oak 更名为 Java,所以高斯林也就成了公认的 “Java 他爹”!幸亏高斯林当时不是在蹲坑,要不然,em.......
到了 1996 年 1 月,Sun 公司发布了 Java 的第一个开发工具包 (JDK 1.0),这也是 Java 发展历程中的重要里程碑,标志着 Java 真正成为了一种独立的开发工具。
以上就是 Java 语言的起源由来,现在你对它的历史知道了吗?
2. 概念 (掌握)
通过上面的介绍,相信各位已经对 Java 有所了解了,但实际上 Java 到底是个什么鬼,有些朋友可能还是没有搞清楚。别急,壹哥再给大家把 Java 的核心概念提炼一下。
● Java 是曾经大名鼎鼎的 Sun 公司,在 1995 年 5 月正式推出的一种面向对象的程序设计语言。
● Java 一开始是 Sun 公司的产品,但后来 Sun 被 Oracle (甲骨文) 给收购了,所以现在 Java 属于 Oracle 公司。
● Java 语言是由 James Gosling (詹姆斯・高斯林,“高司令”) 和同事们共同研发的,通常我们认为高斯林是 “Java 之父”。
● Java 是一种介于编译型和解释型之间的编程语言,但更偏向于解释型。编译型语言写出的代码会根据 CPU 类型的不同,编译成不同的机器码执行,工作原理类似于 “翻译书籍”,如 C、C++ 等;解释型语言可以由解释器直接加载源码运行,工作原理类似于 “同声传译”,但运行效率较低,如 JavaScript、Python、Ruby 等。
● 为了使得定位更清晰,Sun 公司将 Java 分成了三个技术体系:
○ JavaSE(J2SE):Java 2 Platform Standard Edition,Java 平台标准版,包含标准的 JVM 和标准库;
○ JavaEE(J2EE):Java 2 Platform,Enterprise Edition,Java 平台企业版,在 JavaSE 的基础上增加了大量的 API 和库,用于企业级项目开发;
○ JavaME(J2ME):Java 2 Platform Micro Edition,Java 平台微型版,主要针对移动平台开发。
● 2005 年 6 月,JavaOne 大会召开,发布 Java SE 6 版本,并正式将 Java 版本名称中的数字 “2” 取消。从此 J2EE 更名为 Java EE,J2SE 更名为 Java SE,J2ME 更名为 Java ME。所以如果有谁再跟你说什么 “J2SE、J2EE、J2ME”,你就送他一个黑人问号脸,“你到底是有多 out 才会说出这么老古董的话”?
3. 技术体系
虽然壹哥在上面的小节中已经给大家说过,Sun 把 Java 分成了 JavaSE、JavaEE、JavaME 共 3 个平台体系,但我还是想把这个知识点再跟大家强调一下,因为有太多的小白曾经问过我:” 壹哥,我到底是要学 JavaSE,还是 JavaEE?JavaSE 和 JavaEE 到底是什么关系?.......“所以在我们正式开始学习 Java 之前,壹哥还是希望能够把各位心中的这些疑惑都给你解决掉。
为了搞清楚 JavaSE、JavaEE、JavaME 之间的关系,壹哥给大家绘制了下面这张图片:
![](https://static001.geekbang.org/infoq/f4/f43d96ed42e8ced59b0ff98f79ace47a.png)
从上图中你应该可以看出来,JavaEE 的 “范围是最大的 “,这表示什么意思呢?这其实主要是说,JavaEE 这个分类里包含的 API (应用程序接口,我们可以暂时理解为 Java 提供的各种” 工具 “) 最多,而 JavaSE 则完全包含在 JavaEE 里面,JavaME 中有一小部分的 API 和 JavaSE 是重合的。
由此我们可以得出一个结论,作为初学者,我们需要先学习 JavaSE 里提供的各种常用 API,等把 JavaSE 学完了就有” 资格 “去学习 JavaEE 或 JavaME 了!也就是说,JavaSE 是 Java 的必备入门基础,初学者肯定要先学习 JavaSE。这就好比你要学习中医技术,有针灸、推拿、中药等几个方向可以供你选择。但无论你要选择哪个方向,你都得先学习《中医基础理论》这门课,学完了这个才能有资格去学习其他具体的某个方向。现在你知道 JavaSE 与 JavaEE 的关系了吗?
但有的小伙伴还会好奇,要不要学习 JavaME 呢?壹哥告诉你,这个就算了!JavaME 本来是 Sun 用于开发手机等设备的技术平台,但后来 Android、iOS 的异军突起,现在几乎就没人使用 JavaME 了,所以大家知道有这么一个东西就可以了。
我们学习完 JavaSE 之后,还不具备企业级开发的能力,接下来要学习 JavaEE 里的各种 API。所以我们学习 Java 的正确路线,就是先学 JavaSE,再学 JavaEE,而壹哥的《从零开始学 Java》系列文章,主要就是讲解 JavaSE 哦!
其实对于初学者来说,你大可不必过于纠结这些没什么实用价值的概念。等学到后面,你自然而然就会明白它们之间的具体区别,我们只需对其有个大致的了解,把精力放在最核心的问题上即可。
4. Java 特性
对于 Java,我们还需要了解一下 Java 的一些优势和特性,有时候面试官会贱兮兮的问你:你对 Java 了解多少?你为什么学习 Java 而不是其他语言?Java 有哪些优势...... 针对这样的问题,咱们就简单回答一下 Java 的核心特性即可。
● 使用简单:Java 的语法与 C 和 C++ 很接近,可以方便大量 C 系程序员快速转向 Java。但又丢弃了 C++ 中那些特别复杂难用的特性,如操作符重载、多继承、自动强制类型转换等。另外 Java 不支持指针,而是支持引用,并提供了自动分配和 GC 垃圾回收机制,程序员不必关心内存管理。
● 面向对象:Java 提供了类、接口和单继承等面向对象的特性,并支持类与接口之间的实现机制,全面支持动态绑定。可以说,Java 语言是第一个非常纯粹的面向对象的程序设计语言。
● 健壮安全:Java 具有强类型机制、异常处理、GC 垃圾自动收集、安全检查机制、丢弃指针等特性,保证了 Java 程序的健壮性。并且 Java 提供了安全机制来防止恶意代码的攻击,可以通过 ClassLoader 加载器进行字节代码检查,通过 SecurityManager 安全管理机制设置安全哨兵,保证了 Java 程序的安全性。
● 跨平台 / 可移植性:Java 基于 JVM 虚拟机机制,Java 文件会被 JVM 编译成适合不同平台的 class 字节码文件,实现了 “一次编写,处处运行” 的跨平台特性。正因为这个特性,也使得 Java 代码可以轻松实现不同平台间的移植。
● 开源 / 免费:在 2006 年的 JavaOne 大会上,Sun 公司宣布要将 Java 开源,之后陆续将 JDK 的各个部分在 GPL v2 (GNU General Public License v2) 协议下公开了源码 (即 OpenJDK)。除了极少量的产权代码外,OpenJDK 几乎包括了 Sun JDK 的全部代码,两者的代码基本上完全一样。目前 JDK 8 及以前的版本都是完全免费的,JDK 9 之后 Oracle 宣布会对企业进行收费,但是企业可以免费使用 Open JDK。
● 高性能:Java 是介于编译型与解释型之间的语言,但更偏向于解释型,执行性能比 C 语言更高效。而且现在 Java 的编译器不断更新,性能已经与 C++ 类似了。
● 支持网络和多线程:Java 支持 Internet 网络开发,提供了用于网络编程的类库,比如 URL、URLConnection、Socket、ServerSocket、RMI (远程方法激活) 等,并且支持多线程和并发同步机制。
二. Java 发展史
对一个即将开始学习 Java 的小白来说,我们还是有必要适当地了解一下 Java 的发展史的,看看这些年 Java 都经历了哪些历史变革吧。
● 1995 年 5 月 23 日,Java 诞生;
● 1996 年 1 月,JDK 1.0 诞生;
● 1997 年 4 月 2 日,Java One 会议召开,参与者超过万人,打破当时全球同类会议规模纪录;
● 1997 年 9 月,Java Developer Connection 社区成员超十万人;
● 1998 年 2 月,JDK 1.1 被下载超过 2,000,000 次;
● 1998 年 12 月 8 日,JAVA2 企业平台 J2EE 发布;
● 1999 年 6 月,SUN 发布 Java 的三个版本:JavaSE、JavaEE、JavaME;
● 2000 年 5 月 8 日,JDK 1.3 发布;
● 2000 年 5 月 29 日,JDK 1.4 发布;
● 2001 年 6 月 5 日,NOKIA 宣布到 2003 年将会出售超 1 亿部支持 Java 的手机;
● 2002 年 2 月 26 日,J2SE 1.4 发布,Java 计算能力有了大幅提升;
● 2004 年 9 月 30 日,J2SE 1.5 发布,成为 Java 语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE 1.5 更名为 Java SE 5.0;
● 2005 年 6 月,Java One 大会召开,Sun 公司发布 Java SE 6。此时 Java 各种版本已经全部更名,取消了其中的数字 "2":J2EE 更名为 Java EE,J2SE 更名为 Java SE,J2ME 更名为 Java ME;
● 2006 年 12 月,Sun 公司发布 JRE 6.0;
● 2009 年 04 月 20 日,甲骨文以 74 亿美元收购 Sun,取得了 Java 版权;
● 2011 年 7 月 28 日,Oracle 发布 Java 7.0 正式版;
● 2014 年 3 月 18 日,Oracle 发布 Java SE 8.0 (目前最主流版本);
● 2017 年 9 月 21 日,Oracle 发布 Java SE 9.0;
● 2018 年 3 月 21 日,Oracle 发布 Java SE 10.0;
● 2018 年 9 月 25 日,Oracle 发布 Java SE 11;
● 2019 年 3 月 20 日,Oracle 发布 Java SE 12;
● 2019 年 9 月,Oracle 发布 Java SE 13;
● 2020 年 3 月,Oracle 发布 Java SE 14;
● 2020 年 9 月,Oracle 发布 Java SE 14;
● 2021 年 3 月,Oracle 发布 Java SE 16;
● 2021 年 9 月,Oracle 发布 Java SE 17;
● 2022 年 3 月,Oracle 发布 Java SE 18;
● 2022 年 9 月,Oracle 发布 Java SE 19;
● ......Java 继续在大步前进......
当然,对于以上历史,大家了解即可,不用去记这些东西。
三. Java 版本 (重点)
在上面的章节介绍中,壹哥给大家提到了 Java 的很多版本,并且这些不同的版本所具有的功能也不尽相同。所以就有小白来问了,我们学习 Java 时到底该选择哪个版本呢?是越新越好吗?壹哥认为很有必要就这个问题给大家解释一下。
在 Java 的发展过程中,有很多不同的表述方式,有时候会给初学者造成一些误解。但请你记住,所谓的 Java 版本,其实就是指 JDK 的版本,两者是一回事!
1. JDK 版本
Oracle 把 JDK 分成了两种维护情况,即短期支持版本和长期支持版本,我们先来看看 Oracle 官方发布的 JDK 路线图:
![](https://static001.geekbang.org/infoq/9d/9d4a65553af5928059a9c9ece93d32cc.png)
对于短期支持版本 (non-LTS) 而言,Oracle 只会提供 6 个月的支持维护;而对于长期支持版本 (LTS),则提供 8 年的支持维护。所以根据这一规划,Oracle 每隔 6 个月,就会发布一个大版本,每个季度则发布一个中间特性版本。另外 Oracle 还承诺,新的 JDK 发布周期会严格遵循时间点,将于每年的 3 月份和 9 月份发布,中间不会跳票。
现在正常情况下,每隔 6 个月就会有一个短期维护版本 (non-LTS) 发布出来,比如 JDK 9、10、12、13、14、15、16;然后每隔 3 年,就会发布一款得到 8 年长期支持维护的 JDK 版本,比如 JDK 8、11、17。所以小伙伴们,其实你没必要下载使用 JDK9/10/12 等 non-LTS 版本,应该使用 JDK 8、11、17 这样的 LTS 版本。但目前绝大多数主流企业使用的版本是 JKD 8,但不会使用最新的版本,而且 Oracle 宣布从 JDK 9.0 之后开始针对企业收费,所以最新版的 JDK 使用情况待议。
2. 版本选择
既然 JDK 版本有这么多,作为小白,你到底该选择哪个版本的 JDK 呢?是直接学习 JDK 18 还是 19?或者等几个月学习 JDK 21?壹哥告诉你,如果你是一个新手小白,其实没必要追求学习最新的 JDK!
首先每一个 JDK 版本推出时,都存在着很多未知的 bug,所以企业在开发时,都会选择最稳定的版本!现在主流的企业级应用都在使用 JDK 8.0 正式版,并且 JDK 8.0 及之前版本都是免费的,而 JDK 9.0 以后则开始收费 (针对企业收费,非个人)。所以公司考虑到稳定性和费用等问题,都在使用 JDK 8.0,这才是主流!
另外对初学者来说,JDK 的新特性其实对小白来说意义并不大。这些新特性一般是针对性能有较大提升,但你作为一个小白,连最基本的用法都不会呢,现在去追求这些新特性没必要。等你把 JavaSE 学完之后,以后自己再针对性地提升即可。请先把精力放在最核心的地方,要不然基础还没搞扎实,却一心贪多求快,很容易出现” 空中楼阁 “的状况。
另外有些培训机构,宣称会重点讲解 JDK 12、JDK 10、JDK 9 等版本的内容,不过是哗众取宠。这些版本官方都停止维护和下载了,你讲这些有啥用。
所以,为了贴合最主流的企业要求,壹哥的本套教程案例都是基于 JDK 8 来进行讲解的!如果你的 JDK 版本比我的版本高,当然是可以直接兼容运行我的案例的,不用担心!
四、今日作业
1. 第一题:
Java 他爹是谁?
A | 乔布斯 B| 勒布朗・詹姆斯 C | 詹姆斯・高斯林
2. 第二题:
Java 现在俗属于哪个公司?
A | 乔布斯 B| 勒布朗・詹姆斯 C | 詹姆斯・高斯林
3. 第三题:
Java 分为哪几个平台体系?有什么区别?请在评论区写出你的答案哦!
3. 第四题:
目前 Java 的长期维护版本有哪些?请在评论区写出你的答案,并说出你希望学习的 JDK 版本吧。
【下篇预告】
熟悉 Java 的运行机制和 JVM 虚拟机工作原理,搭建出学习 Java 时的必备环境 ---《JDK 安装及环境变量配置》
评论