Java(一):1.0 Java语言概述与核心生态

Java(一):1.0 Java语言概述与核心生态
Prorise1.0 Java语言概述与核心生态
作为一名开发者,我们选择的编程语言是与计算机沟通的桥梁。本章旨在快速回顾Java的本质、核心理念及其在庞大软件生态系统中的位置,为深入学习其语法和特性打下坚实的基础。
1.0.1 何为编程,何为Java
编程,其本质是我们将解决问题的逻辑、思路和步骤,通过特定的语法规则(即编程语言)翻译成计算机能够理解和执行的指令序列的过程。这个过程的目标是自动化地、高效地完成特定任务。
Java,则是在众多编程语言中,一门极具影响力的、高级的、面向对象的编程语言。它由Sun
Microsystems公司的James
Gosling(詹姆斯·高斯林)团队于1995年推出,后被Oracle公司收购。Java的设计哲学吸收了C++的诸多优点,同时又摒弃了其中可能导致程序复杂和不安全的特性,如指针和多重继承,从而使得Java语言在设计上更趋向于简洁、健壮和安全。
1.0.2 Java的核心理念:一次编写,到处运行
Java最著名的口号是(一次编写,到处运行),这一特性的基石是它的**跨平台性 **。
- 实现原理:
- 我们编写的Java源代码(
.java
文件)首先通过Java编译器(javac
)被编译成一种平台无关的中间代码,我们称之为字节码,它以.class
文件的形式存在。 - 这份字节码文件并不直接在操作系统上运行,而是运行在**Java虚拟机(Java
Virtual Machine, JVM)**之上。 - 开发者只需要为不同的操作系统(如Windows, macOS,
Linux)安装相应版本的JVM。JVM会负责将这份统一的字节码解释或即时编译(JIT)成本地操作系统可以执行的机器码。
- 我们编写的Java源代码(
这个过程巧妙地将“编译”和“运行”分离开来,通过JVM这个“适配层”,屏蔽了底层操作系统的差异,从而实现了Java程序的跨平台能力。
)
- 字节码的优势:字节码不仅是实现跨平台性的关键,它还解决了传统解释型语言执行效率低的问题。字节码是一种预处理过的、接近机器码的指令,其执行效率远高于直接解释执行的脚本语言。
1.0.3 Java语言的主要特点
下表总结了Java广受欢迎的几个核心特性:
特性 | 阐述 |
---|---|
**面向对象 ** | 支持封装、继承、多态,让代码组织更清晰,易于维护和扩展。 |
**平台无关性 ** | 基于JVM和字节码,实现了“一次编写,到处运行”。 |
**健壮性 ** | 拥有强大的类型检查机制和异常处理体系,并废除了易错的指针,提高了程序的可靠性。 |
**自动内存管理 ** | 内置垃圾回收(Garbage Collection)机制,自动管理内存的分配与回收,开发者无需手动操作,有效避免了内存泄漏问题。 |
**高安全性 ** | 提供了沙箱安全模型,以及字节码校验、类加载器等多重安全机制,保证了代码在执行过程中的安全性。 |
支持多线程 | 语言层面内置了对多线程的支持,使得开发并发程序变得更加便捷。 |
**支持网络编程 ** | 拥有丰富的网络编程API,非常适合开发分布式和网络应用。 |
简单易学 | 相较于C++,语法更简洁,学习曲线相对平缓。 |
1.1 Java生态系统:JVM、JRE、JDK与三大版本
理解Java的生态系统是进行开发的前提。这包括核心的运行环境和针对不同应用场景的软件版本。
1.1.1 核心环境:JVM, JRE, JDK
这三者的关系是层层包含的,理解它们的区别至关重要。
JVM (Java Virtual Machine)
定义:Java虚拟机,是运行所有Java程序的抽象计算机。 *
作用:加载.class
文件,解释并执行字节码。它是Java跨平台的核心。 *
注意:JVM本身是平台相关的,不同操作系统需要安装不同的JVM。JRE (Java Runtime Environment)
- 定义:Java运行环境。
- 构成:
JRE = JVM + Java核心类库
。核心类库提供了Java程序运行时所必需的基础组件(如String
,Object
等)。 - 作用:如果只是想运行一个已经编译好的Java程序,那么只需要安装JRE即可。
JDK (Java Development Kit)
- 定义:Java开发工具包。
- 构成:
JDK = JRE + Java开发工具
。开发工具包括编译器(javac.exe
)、打包工具(jar.exe
)、调试工具等。 - 作用:对于Java开发者来说,必须安装JDK才能进行程序的开发、编译和调试。
总结:JDK
> JRE
> JVM
。开发者使用 JDK
进行开发,而最终用户只需要JRE
即可运行程序。
1.1.2 Java平台的三大版本
针对不同的应用开发领域,Java提供了三个主要的平台版本。
版本 | 全称 | 最新发展与定位 |
---|---|---|
Java SE | Java Standard Edition (标准版) | 这是整个Java技术的核心和基础。它提供了桌面应用、服务器应用开发所需的核心API。我们学习的绝大部分Java语法和核心类库都属于Java SE的范畴。 |
Jakarta EE | 原名 Java EE (Java Enterprise Edition, 企业版) | 注意:Java EE已于2017年移交给Eclipse基金会管理,并更名为Jakarta EE。它在Java SE的基础上,提供了一套用于构建大规模、分布式、高可用的企业级应用的API规范,如Servlet(Web服务)、JPA(持久化)、JMS(消息服务)等。 |
Java ME | Java Micro Edition (微型版) | 主要面向资源受限的嵌入式设备和移动设备(如功能手机、机顶盒)。注意:随着Android和iOS的崛起,Java ME在现代移动开发中的地位已大幅下降,目前已很少被提及和使用。 |
1.2 Java程序的基本构成与分类
1.2.1 程序入口:main
方法
一个标准的Java独立应用程序(Application)必须包含一个main()
方法作为程序的执行入口。JVM在启动程序时,会寻找并执行这个main
方法。
1 | // 一个包含main方法的标准Java类 |
1.2.2 已废弃的技术:Java小程序 (Applet)
在早期的Web开发中,存在一种被称为Java
Applet的技术。它是一种可以嵌入到网页中运行的小型Java程序,无需main
方法,由浏览器中的Java插件负责加载和执行。
注意:由于安全问题和现代Web技术(如HTML5,
JavaScript)的兴起,Applet技术已经被主流浏览器厂商放弃支持,并从Java
11开始被正式废弃。在现代开发中,我们已不再使用此技术。
1.3 Java与其他语言的比较
1.3.1 Java vs. C++
Java在设计之初借鉴了C++,但为了提升开发效率和安全性,做出了诸多改变。
对比维度 | C++ | Java |
---|---|---|
内存管理 | 程序员需要手动分配和释放内存(new /delete ),容易出错。 | 拥有自动垃圾回收机制(GC),无需手动管理内存,更安全。 |
指针 | 支持指针,可以直接操作内存地址,功能强大但风险高。 | 取消了指针,使用“引用”代替,避免了直接内存操作的危险。 |
继承 | 支持多重继承,一个类可以继承多个父类,可能导致复杂的“菱形问题”。 | 只支持单继承,但通过实现多个接口的方式来达到类似多继承的效果,结构更清晰。 |
平台性 | 编译后生成特定平台的机器码,可移植性差。 | 编译成平台无关的字节码,通过JVM实现跨平台。 |
1.3.2 Oracle JDK vs. OpenJDK
在选择JDK时,我们常常会遇到Oracle
JDK和OpenJDK,理解它们的区别对于企业和个人开发者都非常重要。
对比维度 | OpenJDK (开放JDK) | Oracle JDK |
---|---|---|
源码与核心 | 是Java SE的开源参考实现,由社区(包括Oracle)共同维护。它是所有JDK构建版本的基础。 | 基于OpenJDK构建,包含了Oracle自己的一些商业特性(如Java Flight Recorder)和性能优化。 |
许可协议 | 采用 GPL v2 with Classpath Exception 协议,完全免费,可以自由使用和分发。 | 注意:自Java 11起,Oracle JDK采用新的OTN许可协议,用于商业生产环境需要付费订阅。个人学习和开发使用免费。 |
更新频率 | 版本更新非常活跃,新功能会先在OpenJDK中出现。 | 长期支持版(LTS)更新稳定,但普通版本更新较快。 |
稳定性与选择 | 稳定性:OpenJDK本身已经非常稳定,被广泛用于生产环境。其他构建:除了Oracle JDK,还有许多基于OpenJDK的优秀发行版,如 Adoptium (Temurin), Amazon Corretto, Azul Zulu 等,它们都是免费且生产级的选择。 | 稳定性:被认为是高度稳定和经过严格测试的商业版本。选择:如果需要Oracle的商业支持或特定商业功能,则选择Oracle JDK;否则,OpenJDK及其各大免费发行版是当前的主流和推荐选择。 |