大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 001 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同学学习。当然,我也会在必要的时候进行相关技术深度的技术解读,相信即使是拥有多年 Java 开发经验的从业者和大佬们也会有所收获并找到乐趣。
–
作为 “Java 入门” 也是整个专栏的第一篇文章,我在这里主要是会先介绍一下 Java 语言 —— Java 是什么? 可以用来做什么? 从诞生到现在依旧有这么多人用着 Java,说明它一定做对了一些,有着一些优点,那么都是什么?Java 近些年来在全球的热度有所下降,是什么原因?Java 还值得作为第一门编程语言或者工作语言来学习吗?现在的 Java 就业前景是怎样的?这些都是本篇内容所要讨论的。
最后在前言的末尾我补充一下,如果这篇文章,对大家有所帮助或收获一定的乐趣和想法,那么非常欢迎大家能够,点赞、评论、收藏、订阅。这些也将是我持续更新的最大动力。
文章目录
1、Java 语言的简介
1.1、Java 语言的概述
Java 语言是于 1991 年由 Sun(Sun Microsystems,美国)公司的 詹姆斯·高斯林(James Gosling)团队研发的一门面向对象的编程语言。最初命名为 Oak,并于 1995 年更名为 Java 后开始推广。
如今,随着互联网的崛起,Java 已经成为目前世界上最流行、最重要的计算机编程语言之一。
Java 作为一门面向对象的高级编程语言,在设计之初,借鉴了多种编程语言的特性和理念。比如它吸收了 C 语言的优点(语法结构、操作符和数据类型),同时摒弃了 C 语言中难以理解的多继承、指针等概念,使得 Java 语言既功能强大又简单易用。
作为静态面向对象编程语言的代表,Java 极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
1.2、Java 语言的特性
Java 自 1995 年问世以来,因其卓越的通用性、高效性、平台移植性和安全性等特性,成为全球范围内应用范围最广的开发语言,而且即使历经十余年发展仍然在行业内保持着其"常青树"的地位。
1995 年 Java 发布的同时,Sun 公司也发布的一份官方文档,在后来也被大家称作 Java 白皮书。Java 白皮书是理解 Java 语言设计初衷和主要特性的重要参考资料,对于 Java 开发者和学习者来说具有很高的参考价值。
Oracle 官网 Java 白皮书参考链接:https://www.oracle.com/java/technologies/language-environment.html
在这份文档中 James Gosling 主要介绍了 Java 语言的设计理念、核心特性和应用领域。同时也阐述了 Java 的跨平台性、面向对象、网络编程、安全性、多线程等众多特性。
这 11 个关键特性体现了 Java 设计哲学的核心核心:
简单性:Java 旨在易于学习和使用。其语法类似于 C++,但去除了指针和多重继承等容易引起错误的特性,使编程更加直观;
面向对象:Java 是纯面向对象的编程语言,所有代码必须位于类中。面向对象的设计使得代码模块化、可重用,并促进代码维护;
分布式:Java 提供丰富的 API,支持 TCP/IP 协议,使网络编程和分布式计算变得简单,可以方便地创建和访问远程对象;
健壮性:Java 强调健壮性,通过强类型检查、异常处理和自动垃圾回收,确保程序能可靠地运行,并在编译时发现潜在错误;
安全性:Java 内置多种安全特性,包括类加载机制、沙盒安全模型和内存管理,保护系统免受恶意代码的侵害;
体系结构中立:Java 实现了"一次编写,到处运行"的目标,通过 Java 虚拟机(JVM),使得程序可以在任何平台上运行,而无需修改代码;
可移植性:Java 程序编译成平台无关的字节码,可以在任何支持 Java 的平台上运行,无需重新编译,确保了应用的可移植性;
解释型:Java 程序在运行时通过 JVM 解释执行,这赋予了 Java 强大的跨平台能力,并允许即时(JIT)编译以提高性能;
高性能:尽管 Java 是解释型语言,但通过 JIT 编译技术,Java 程序的执行速度接近于原生编译的 C++ 程序,兼具灵活性和性能;
多线程:Java 原生支持多线程编程,提供一套简便的 API,用于创建和管理线程,简化了并发编程,提升程序的响应性和性能;
动态性:Java 是动态语言,可以在运行时加载新类和对象,支持动态扩展和模块化编程,适应不断变化的运行环境。
这些特点共同构成了 Java 设计哲学的核心,使得 Java 成为一种功能强大、灵活且安全的编程语言,广泛应用于各个领域。
1.3、Java 语言的应用现状
即使经过了近 30 年的发展,Java 依旧在软件开发领域保持强劲的活力,并且在多个行业中占据重要地位。以下是 Java 在一些主要领域的应用现状:
企业应用开发:Java 是企业级应用开发的主要语言。许多大型企业和组织选择 Java 来构建高性能、可靠和安全的应用程序。Spring Framework 和 Jakarta EE(原 Java EE)等框架为企业级 Java 应用提供了强大支持;
移动应用开发:在移动应用开发领域,Java 依然是核心语言,特别是在 Android 平台上。Android 使用 Java 作为主要开发语言,开发者利用 Android SDK 构建功能丰富的移动应用程序;
大数据和云计算:Java 在大数据处理和云计算领域表现出色。许多大数据框架和平台(如 Apache Hadoop 和 Apache Spark)都支持 Java 编程。Java 的跨平台性和稳定性使其成为构建可扩展大数据解决方案的理想选择;
物联网(IoT):随着物联网的快速发展,Java 在这个领域也发挥着重要作用。Java ME(Micro Edition)被广泛用于嵌入式设备和物联网应用的开发,其高度可移植性和安全性是关键优势;
人工智能和机器学习:尽管 Java 在人工智能和机器学习领域并不是首选语言,但仍然有一些强大的库和工具可以支持 Java 在这些领域的开发。例如,Weka 和 Deeplearning4j 等库提供了在 Java 中进行机器学习和深度学习的功能;
游戏开发:相对于其他编程语言和引擎,Java 在游戏开发领域的应用较少。尽管如此,仍然有一些游戏开发者和公司选择使用 Java 来开发他们的游戏。例如,Minecraft 就是一个使用 Java 编程语言开发的知名游戏,其后端服务和游戏逻辑都是通过 Java 实现的。此外,一些游戏开发框架和库,如 libGDX,也支持使用 Java 来开发跨平台的游戏应用程序。
总的来说:Java 作为一种稳定可靠、灵活易用且功能强大的编程语言,在全球范围内的各个领域赢得了广泛认可和应用。无论是初学者还是资深开发者,通过学习和掌握 Java 都能显著提升编程技能和竞争力。
2、Java 语言的演进
2.1、"Java"名字的由来
Java 起初并非叫 Java,甚至于这个名字都没有进入备选前三(Java 排名第四)行列,最初架构搭建的时候这套语言被命名为"Greentalk",因为,当时这个项目组的名字叫 Green 很随意的起名。 后来改名为"Oak",翻译成中文是"橡树"的意思,在欧美很多国家,橡树因其高大、强壮、枝繁叶茂被视为国树,而恰巧的是,詹姆斯.高林斯(James Gosling) 的窗外就有一颗。
因此,Java 的第二个名字就应运而生了,但是天公不作美,当 James Gosling 团队打算注册新的名称时才发现,Oak 这个名字已经被其他公司捷足先登了。
无奈之下高林斯团队只能重新起名,新名字需要具备 Dynamic(动态的)、Revolutionary(革命性的)、Silk(像丝绸一样柔软的)、Cool(炫酷的)等特点,有人说用"Silk",也有人说用"Lyric",但最终都没有被律师团队认可。
有一天,团队中的一个工程师马克(Mark Opperman)去咖啡店喝咖啡,得到启发想将他们的语言命名为"Java”,这个命名源于印度尼西亚的爪哇岛,因其盛产咖啡而闻名
马克回去将自己想到的名字与团队成员分享之后,大家一拍即合,Java 之名从此诞生,并寓意:希望后世之人可以通过 Java 过上舒适,惬意的生活。
Ps:Java 语言中的许多类库名称,如 JavaBeans、NetBeans 和 ObjectBeans 等,也都与咖啡有关。
2.2、Java 演进历史
上个世纪 90 年代,单片计算机诞生,推动了电子产品的智能化,为抢占市场,Sun 公司高层紧急会议,推出"Green"计划,由詹姆斯·高斯林(James Gosling)牵头,开发出一种可以在多种电子产品上运行的程序架构。 由此 Green 项目组正式成立,决定采用 C++ 进行程序开发,但随着项目深度的进行,大家逐渐发现了 C++ 的弊端, 庞大且复杂的 C++ 无法满足他们丰富的跨平台需求,高林斯项目组经过深度讨论,最终咬牙跺脚,决定以 C++ 为底层开发出一套简单,高效,跨平台的程序语言。
1992 年 Oak 雏形诞生,东西搞出来了,Sun 公司经过多方洽谈,联系了不少的硬件公司进行商业展示,悲伤的是这一次 Oak 没有让金主爸爸们满意。
时间很快来到了 1994 年,Green 项目用 Oak 开发出了可以在网页上嵌入小程序的 Applet 技术,此举让很多公司看到了 Oak 的价值,Oak活了下来。
1995年,Sun 公司将 Oak 正式更名为 Java,同年发布了 Java1.0 版本,提出了那句"Write Once, Run anywhere",一次编译,随处运行,这句口号注定会写入世界编程史。而这一年也成为了 Java 的元年,此后 Java 正式进入了版本迭代时代。
下面是 Java 语言发展的大事记:
- 1991 年:Sun Microsystems 的 Patrick Naughton、Mike Sheridan 和 James Gosling 在这一年启动了 Green 项目,这个项目的目标是为数字设备(如电视机、电话机等)开发编程语言。这个项目最终导致了 Java 语言的诞生;
- 1995 年 05 月:Sun Microsystems 正式发布了 Java 语言,最初名为 Oak,后来改名为 Java。其主要特点是跨平台性,即 “写一次,处处运行”,这使得 Java 语言具有很好的跨平台性;
- 1996 年 01 月:JDK 1.0 发布,这是 Java 的第一个正式版本;
- 1996 年 02 月:Java 白皮书发布;
- 1997 年 02 月:JDK 1.1 发布;
- 1998 年 12 月:JDK 1.2 发布,也被称为 Java 2;
- 1999 年 12 月:Apache Tomcat 发布,这是一个开源的 Servlet 容器,广泛用于 Java Web 应用的开发和部署;
- 1999 年 12 月:Sun Microsystems 在 Java 2 基础上,引入了多个 Java 版本,即 J2SE(后来的 Java SE,即 Standard Edition,是 Java 平台的标准版本),JJ2EE(后来的 Java EE,即 Enterprise Edition,专注于企业级开发的版本)和 J2ME(后来的 Java ME,即 Micro Edition,是 Java 平台的嵌入式开发版本);
- 1999 年 12 月:Java Community Process (JCP)的成立,旨在规范 Java 技术的发展,确保其开放性和标准化;
- 2000 年 05 月:JDK 1.3 发布;
- 2001 年 01月:JetBrains 发布了 IntelliJ IDEA(收费),这是一个专为提高开发者生产力而设计的集成开发环境(IDE),以其智能代码补全和高级调试功能著称,发布后迅速成为 Java 开发者的首选 IDE 之一;
- 2001 年 11 月:Eclipse(免费) 发布,这是一个由 IBM 发起的开源 IDE 项目,发布后迅速成为 Java 开发者的首选工具之一;
- 2002 年 02 月:JDK 1.4 发布;
- 2003 年 10 月:Rod Johnson 发布了 Spring Framework,为 Java 开发引入了 IoC(Inversion of Control)和 AOP(Aspect-Oriented Programming)等概念,极大简化了企业级应用的开发;
- 2004 年 09 月:JDK 5 发布,J2SE 更名为 JavaSE;
- 2006 年 11 月:Sun Microsystems 宣布启动 OpenJDK 项目,将 Java 平台开源,允许开发者参与 Java 开发并改进其功能;
- 2006 年 12 月:JDK 6 发布;
- 2008 年 09 月:Google(谷歌) 发布了 Android(安卓) 操作系统,这是基于 Java 的移动操作系统,迅速成为全球最流行的智能手机平台之一,极大地推动了 Java 在移动设备上的应用;
- 2009 年 04 月:Oracle(甲骨文)公司在 2009 年 4 月 20 日宣布正式以 74 亿美元的价格收购 Sun 公司,Java 商标从此正式归 Oracle 所有;
- 2010 年 08 月:Oracle 起诉 Google,指控其在 Android 中非法使用 Java API。此案历时多年,对 Java API 的版权问题产生了深远的影响。最终,2021 年 04 月,美国最高法院裁定 Google 对 Java API 的使用属于 “合理使用”;
- 2011 年 07 月:JDK 7 发布;
- 2014 年 03 月:JDK 8 发布,这是一个里程碑式的、非常稳定和成熟的版本,这个版本引入了 Lambda 表达式、函数式接口、方法引用、Stream API、默认方法和静态方法等特性;
- 2014 年 04 月:Spring Boot 发布,Spring Boot 的发布进一步简化了 Spring 应用的创建和配置,成为微服务架构中广泛使用的框架;
- 2017 年 09 月:JDK 9 发布,同时 Oracle 宣布 Java 将采用半年发布一次的版本计划,以便更快地引入新特性和改进;
- 2017 年 10 月:为了应对 Oracle 对 Java SE 商业支持政策的改变,AdoptOpenJDK 项目启动,提供免费的开源 Java SE 构建,得到广大社区和企业的支持;
- 2018 年 01 月:Oracle 宣布,从 2019 年 01 月起,对用于商业用途的 Java SE 8 将开始收费,用户需要购买商业许可证才能继续获得更新和支持。这一公告促使许多企业和开发者转向开源的 AdoptOpenJDK;
- 2018 年 03 月:JDK 10 发布;
- 2018 年 09 月:JDK 11 发布,这是一个长期支持版本;
- 2019 年 03 月:JDK 12 发布;
- 2019 年 09 月:JDK 13 发布;
- 2020 年 03 月:JDK 14 发布;
- 2020 年 09 月:JDK 15 发布;
- 2021 年 03 月:JDK 16 发布;
- 2021 年 09 月:JDK 17 发布,这是一个长期支持版本;
- 2022 年 03 月:JDK 18 发布;
- 2022 年 09 月:JDK 19 发布;
- 2023 年 03 月:JDK 20 发布;
- 2023 年 09 月:JDK 21 发布,这是一个长期支持版本;
- 2024 年 03 月:JDK 22 发布;
- …
1.3、Java 各个版本特性
Java 语言自 1995 年由 Sun Microsystems 公司发布以来,已经经历了多次重要的版本更新和语言特性的改进。以下是 Java 语言的一些主要演进阶段:
版本 | 日期 | 版本特性 |
---|---|---|
JDK_1.0 | #1996_01 | Java 的首个正式版本,伟大的一个里程碑,提供了基本的对象导向编程能力和网络处理能力 |
JDK_1.1 | #1997_02 | 引入了 内部类、Java Beans、JDBC、反射 API、RMI 等新特性 |
JDK_1.2 | #1998_12 | 引入了 集合框架、Swing 包、内存映射文件 I/O、NIO、断言、正则表达式等新特性 |
JDK_1.3 | #2000_05 | 增加了 HotSpot JVM、JavaSound、Java Naming and Directory Interface (JNDI) 等特性 |
JDK_1.4 | #2002_02 | 增加了 XML 解析、正则表达式、Java Web Start、Java Print Service 等特性 |
JDK_5.0 | #2004_09 | 引入了泛型、自动装箱/拆箱、枚举、可变参数、for_each 循环等特性 |
JDK_6.0 | #2006_12 | 增加了 JDBC 4.0、Java Compiler API、Pluggable Annotations 等特性 |
JDK_7.0 | #2011_07 | 引入了 switch 对字符串的支持、自动资源管理、改进的类型推断、多异常捕获等特性 |
JDK_8.0 | #2014_03 | 引入了 Lambda 表达式、函数式接口、方法引用、Stream API、默认方法和静态方法等特性 |
JDK_9.0 | #2017_09 | 引入了模块系统,可以将 JDK 划分为多个模块,便于开发大型应用。同时还引入了 JShell、改进了 Javadoc、增强了 Stream API 等 |
JDK_10 | #2018_03 | 引入了局部变量类型推断,可以使用 var 关键字声明局部变量,无需显式指定其类型 |
JDK_11 | #2018_09 | 引入了新的垃圾收集器 ZGC,可以处理 TB 级别的堆内存,且停顿时间不超过 10ms。同时还引入了新的字符串方法、HTTP 客户端 API 等 |
JDK_12 | #2019_03 | 引入了新的 switch 表达式,可以使用更简洁的方式编写 switch 语句 |
JDK_13 | #2019_09 | 引入了文本块功能,可以方便地编写多行字符串 |
JDK_14 | #2020_03 | 引入了 instanceof 的模式匹配,对 switch 语句进行了改进等特性 |
JDK_15 | #2020_09 | 引入了密封类和接口,可以限制哪些其他类或接口可以继承或实现它们 |
JDK_16 | #2021_03 | 引入了 Records,可以方便地创建只包含数据的类,无需编写大量模板代码 |
JDK_17 | #2021_09 | 引入了模式匹配的第二阶段,可以在 switch 表达式中使用模式匹配。同时还引入了新的垃圾收集器 Shenandoah |
JDK_18 | #2022_03 | 默认 UTF_8、简单的网络服务器、弃用 finalize |
JDK_19 | #2022_09 | 模块化编程、本地类型推断、文本块、嵌套注解、改进的 Garbage Collection |
JDK_20 | #2023_03 | 模式匹配、Sealed Classes、Records、Text Blocks、ZGC |
JDK_21 | #2023_09 | 引入虚拟线程、结构化并发、顺序集合、记录模式、外部函数和内存 API、向量 API |
JDK_22 | #2024_03 | 提供了符合 GPL 协议的生产就绪二进制文件、G1 的区域引入、未命名变量和模式等新特性 |
3、Java 语言的前景
3.1、Java 语言发展现状
时至今日,Java 语言已经火爆 20 余载,那么,在这个瞬息万变的移动互联网时代,未来,它还能一如既往,引领开发界吗?还是如有些人说的会饱和而辉煌不再?
下图是反映编程语言热门程度「Tiobe 排行」在 2024 年 5 月的编程语言热度排名:
下图是反映编程语言热门程度「Tiobe 排行」在 2024 年 5 月的排名趋势图:
从以上趋势图来看,Java 的热度排名有所下降,尤其是在 2016 年之后这一趋势更为明显,这一趋势的主要原因可以归结为以下两个方面:
- 编程语言的多样化:随着技术的进步和应用场景的多样化,越来越多的新编程语言被开发和应用。例如,Python 因其简洁的语法和强大的库支持,尤其在数据科学、人工智能和机器学习领域获得了广泛的应用;
- 特定领域语言的兴起:一些语言在特定领域表现出色,吸引了大量开发者。例如,JavaScript 在前端开发中的主导地位,Swift 和 Kotlin 在移动开发中的流行,Go 和 Rust 在系统编程和高性能应用中的使用。
3.2、Java 语言就业前景
诚然,仅从以上的热度占比来看,Java 已经显露出了明显颓势,并且在网上也可以看到很多人开始看衰 Java,觉得它已经要彻底凉了。实则并不是,即便如此衰败的情况下,Java 仍然是国内市场上使用率最高,那么真如网上所说,Java 市场彻底饱和了吗?
目前来看,Java 程序员远远没有饱和,现在 Java 程序员是挺多的,但是职位需求量更大,只是相对来说高薪酬的要求变高了,特别是能干实干或优秀的程序员是相当缺乏的,不存在存在饱和一说。
就工作而言,对于国内 Java 程序员来说,年薪 10 万+ 是很正常的一个薪酬水平,从经验来说,如果你是一位实干,又有强烈改变际遇的意志力的人,我建议可以做 Java 技术开发,至少你的付出会有收获(技术领域内相对公平);
就学习而言,Java 作为一门优秀的语言,可以让你在学习过程中收获很多。它的面向对象编程思想和设计模式能够帮助你建立扎实的编程基础,同时其广泛的应用场景和强大的生态系统可以让你在各个领域获得实践经验和职业机会。