跳到主要内容深入理解 Java 语言的核心概念 | 极客日志Javajava
深入理解 Java 语言的核心概念
Java 是一门面向对象的编程语言,具有跨平台、自动内存管理、多线程等特性。文章介绍了 Java 的应用领域,包括企业级系统、Web 开发、Android 及大数据平台。详细阐述了 Java 的简单性、安全性、高性能等特点。同时解析了 Java 编程环境,区分了 JDK、JRE 和 JVM 的关系及作用。最后通过 Hello World 示例展示了 Java 程序的基本结构、注释方式及 main 函数的含义,并总结了 Java 的优势与劣势。
GopherDev0 浏览 一、Java 语言及其特性
1.1 Java 语言是什么
Java 是一门面向对象的编程语言,由 Sun 公司于 1995 年正式发布,其设计理念源于对 C 语言的改进,摒弃了多继承和指针等复杂概念,实现了功能强大与简单易用的结合。
作为静态面向对象编程语言的代表,秉承着'一次编译,到处运行'的理念,Java 通过 JVM(Java 虚拟机)实现跨平台运行,具备分布式、健壮性、安全性、多线程等特性,支持桌面应用、Web 应用和嵌入式系统开发。

TIOBE 编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新。这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量,使用搜索引擎进行计算。
Java 语言在编程语言社区排行榜中一直位居前五,可见其重要性。

此外,Java 语言可以在以下领域中使用:
- 企业级系统
比如大型复杂的企业级软件系统。Java 语言所具有的安全机制以及跨平台性的优势,使其在分布式系统领域开发中有广泛应用,涉及到金融、电信、交通、电子商务、ERP 系统等。
- Web 开发领域
Java 语言在设计初期,赶上了互联网发展的风口,当时就瞄准了互联网开发。凭借稳定的性能表现和较好的扩展性,Java 语言一直是大型互联网平台的重要解决方案。
- Android 平台应用
Android 是一种智能手机操作系统,其中的应用程序大多是用 Java 语言编写的。Android 的 SDK 大部分也是直接将 Java SDK 翻译过来的。因此具有 Java 基础,也可以快速上手 Android 开发。
- 大数据平台开发
大数据相关的各类框架,比如 Hadoop、Spark、Storm、Flink 等,以及各种中间件 Flume、Kafka、Sqoop 等,这些框架以及工具等大多数是用 Java 语言开发的。随着大数据技术的落地应用,Java 语言在大数据领域的应用前景也是比较广阔的。
1.2 Java 语言的特性
- 简单性
Java 语法比 C++ 语法简洁不少,让开发者使用起来更加方便快捷。例如,Java 不支持 goto 语句,代之以提供 break 和 continue 语句以及异常处理。Java 还剔除了 C++ 的操作符重载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为 Java 没有结构,数组和串都是对象,所以不需要指针。
- 平台无关性
由于 Java 语言具有'一次编译,到处运行'特性,在 Java 编译器将源代码编译成字节码(bytecode)之后,该字节码可以在任意装有 JVM(Java 虚拟机)的平台上运行。
- 面向对象
在 Java 语言的世界中,一切皆是对象。正是因为面向对象编程(OOP)这个特性,使得 Java 代码更易于维护和重用,包括类(class)、对象(object)、继承(inheritance)、多态(polymorphism)、抽象(abstraction)和封装(encapsulation)。
- 自动管理内存
Java 语言具有自己的垃圾回收机制,可以自动管理内存和回收不再使用的对象,从而减少内存泄漏和其他内存相关问题。这样一来,开发者不用手动地管理内存和不再使用的对象。
- 分布式(微服务)
Java 语言专为网络应用设计,具备原生分布式特性。其丰富的 API 类库支持多层级网络连接:既可处理 HTTP、FTP 等应用层 TCP/IP 协议,又通过 Socket 类实现可靠的流式网络通信,从而高效构建分布式客户端与服务器系统。同时,Java 应用程序可通过 URL 透明访问网络对象,其便捷性等同于操作本地文件。
- 健壮性
Java 语言通过以下操作提升健壮性:
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- Keycode 信息
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
- Escape 与 Native 编解码
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
- JavaScript / HTML 格式化
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
- JavaScript 压缩与混淆
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
强类型检查(强制执行变量类型声明,减少运行时类型错误,提升代码可靠性)垃圾回收(自动管理内存,防止内存泄漏和野指针问题,增强系统稳定性)异常处理机制(提供结构化错误处理,确保在故障时系统仍能稳定恢复或优雅降级)JVM 平台无关性(字节码在 Java 虚拟机(JVM)上运行,确保跨平台一致性和安全性)。安全性
Java 的安全性建立于其多层次的防御机制:语言层面通过取消指针和自动垃圾回收防止内存越界与泄漏,运行时则依靠严格的字节码验证和沙箱隔离机制限制代码权限避免恶意操作;同时主流 Java 框架采用参数化查询有效防御 SQL 注入等漏洞,而灰度发布等部署策略确保生产环境的稳定安全。可移植性
Java 与 C/C++ 的一个关键区别是,其规范详尽定义了基本数据类型的大小和运算行为,不涉及任何依赖具体实现的模糊地带。例如,Java 中的 int 类型始终为 32 位整数,而在 C/C++ 中,int 的宽度(如 16 位或 32 位)通常由编译器厂商自由指定。这种数据类型的固定大小有效消除了代码跨平台移植的主要障碍。此外,Java 环境本身具备优异的新硬件和操作系统移植能力:编译程序(如 javac)采用 Java 语言编写,而运行系统(如 JVM)则基于 ANSI C 实现。高性能
Java 是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java 设计者制作了'及时'编译程序,它能在运行时把 Java 字节码翻译成特定 CPU(中央处理器)的机器代码,也就是实现全编译了。Java 字节码格式设计时考虑到这些'及时'编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。解释性
Java 编译程序生成字节码(非机器码),字节码平台中性,可通过 Java 虚拟机(JVM)在任意系统运行。开发中的链接阶段被简化为增量式加载新类,实现轻量高效开发,支持快速原型和迭代;运行时,JVM 解释器动态将字节码翻译成本地 CPU 指令。多线程
Java 是多线程语言,支持并发执行。通过 java.lang.Thread 类管理线程操作,并利用 synchronized 关键字等同步机制确保方法线程安全,维护共享变量的一致性。动态性
Java 语言设计成适应于变化的环境,它是一个动态的语言。例如,Java 中的类是根据需要载入的,甚至有些是通过网络获取的。
面试题:说一下 Java 的特点?
平台无关性:Java 具有'一次编译,到处运行'的特性,这使得 Java 经过编译的字节码可以在任何安装有 JVM 的平台上运行。
面向对象:Java 语言具有面向对象编程(OOP)这个特性,使得 Java 代码更易于维护和重用,包括类(class)、对象(object)、继承(inheritance)、多态(polymorphism)、抽象(abstraction)和封装(encapsulation)。
自动管理内存:Java 语言具有自己的垃圾回收机制,可以自动管理内存和回收不再使用的对象,从而减少内存泄漏和其他内存相关问题。
二、Java 程序
2.1 Java 编程环境
JDK(Java Development Kit)
JDK 称为 Java 开发包或 Java 开发工具,是一个编写 Java 的程序开发环境,可以用于编写 Java 的 Applet 小程序和应用程序。
JDK 是整个 Java 的核心,包括了 Java 运行环境(Java Runtime Environment),一些 Java 工具和 Java 的核心类库(Java API)。不论什么 Java 应用服务器实质都是内置了某个版本的 JDK。主流的 JDK 是 Sun 公司发布的 JDK,除了 Sun 之外,还有很多公司和组织都开发了自己的 JDK,例如,IBM 公司开发的 JDK,BEA 公司的 Jrocket,还有 GNU 组织开发的 JDK。
JRE(Java Runtime Environment)
JRE 包括了 Java API 类库中的 Java SE API 子集和 Java 虚拟机这两部分,是支持 Java 程序运行的标准环境。
JRE 是个运行环境,JDK 是个开发环境。因此写 Java 程序的时候需要 JDK,而运行 Java 程序的时候就需要 JRE。而 JDK 里面已经包含了 JRE,因此只要安装了 JDK,就可以编辑 Java 程序,也可以正常运行 Java 程序。但由于 JDK 包含了许多与运行无关的内容,占用的空间较大,因此运行普通的 Java 程序无须安装 JDK,而只需要安装 JRE 即可。
JVM(Java Virtual Machine)
JVM 是用于运行 Java 字节码的虚拟机,包括一套字节码指令集、一组程序寄存器、一个虚拟机栈、一个虚拟机堆、一个方法区和一个垃圾回收器。JVM 运行在操作系统之上,不与硬件设备直接交互。
Java 源文件在通过编译器之后被编译成相应的 .Class 文件(字节码文件),.Class 文件又被 JVM 中的解释器编译成机器码在不同的操作系统(Windows、Linux、Mac)上运行。每种操作系统的解释器都是不同的,但基于解释器实现的虚拟机是相同的,这也是 Java 能够跨平台的原因。在一个 Java 进程开始运行后,虚拟机就开始实例化了,有多个进程启动就会实例化多个虚拟机实例。进程退出或者关闭,则虚拟机实例消亡,在多个虚拟机实例之间不能共享数据。
面试题 1:JVM 和 Java 有什么区别?
Java 是语言,JVM 是平台,一个是写代码的工具,一个是运行代码的平台,两者分工不同但是相互配合。Java 用于写代码,但是不能直接运行程序,得先通过编译器将源代码编译成字节码,再通过解释器将字节码翻译成机器语言才能执行程序。Java 程序之所以能够实现跨平台,就是因为 JVM 能够在不同平台上将字节码翻译成对应平台的机器码,Java 程序得以执行。再说说和 JDK 以及 JRE 的关系。JDK 是 Java 开发工具包,包含了编译器、调试器、各种开发工具和 JRE。JRE 是 Java 运行环境,其中包含了 Java 核心类库和 JVM。总的来说:JDK ⊃ JRE ⊃ JVM。JVM 不止能执行 Java 程序。由于 JVM 执行的是字节码,其他编译后生成的是字节码的编程语言也可以在 JVM 上运行。
面试题 2:Java 为什么是跨平台的?
Java 能够实现跨平台,主要依赖 JVM。JVM 是一个能够运行 Java 字节码的软件。简单来说,Java 源代码经过编译之后生成的 .Class 文件(字节码文件)必须经过 JVM 内部的解释器翻译成当前平台的机器码才能被运行。任何平台只要安装了 JVM,就可以运行 Java 程序。
面试题 3:JDK、JRE 和 JVM 之间的关系是什么?
JDK 是 Java 开发工具包,是开发 Java 工具所需的工具集合,包含了编译器(javac)、调试器(jdb)、一系列类库(Java 标准库和开发工具库)、JRE 和 JVM。JDK 提供了开发、编译、调试和运行 Java 程序所需的所有工具和环境。JRE 是 Java 运行环境,是 Java 程序运行所需的最小环境,包含了 Java 核心类库和 JVM,用于支持 Java 程序的执行,不包含开发工具只提供运行环境。JVM 是 Java 虚拟机,是 Java 程序得以运行的重要组成部分,负责将字节码通过解释器翻译成机器语言并执行程序,提供了内存管理、垃圾回收和安全性等功能,是 Java 程序能够跨平台的原因。总结三者的关系:JDK ⊃ JRE ⊃ JVM。
面试题 4:为什么 Java 解释、编译都有?
Java 源代码先被 编译 成字节码,JVM 解释器需要逐行读取 解释 字节码并转换成本地机器指令执行,虽然这种方式牺牲了部分性能,但无需为多个平台编译多个版本,从根本上解决了跨平台兼容性问题。为了提升性能,JVM 引入了即时编译器(JIT Compiler),JVM 在运行时监控代码执行频率,将频繁执行的"热点代码"(如循环体)动态编译成本地机器码。编译后的代码直接由 CPU 执行跳过解释步骤,大幅提升性能。因此,Java 实际上是 '编译 + 解释+JIT' 的混合模式。
面试题 5:Java 的优势和劣势分别是什么?
优势:跨平台是 Java 的一大优势,依靠 JVM 实现了'一次编译,到处运行';面向对象应该也是一个优势,这个特性使得 Java 代码更加易维护和重用;强大的生态系统也是,比如 Spring 框架、Hibernate,各种库和工具,社区支持大,企业应用广泛;自动垃圾回收机制减少了内存泄漏的问题,对开发者友好;多线程设计使得并发编程方便很多;Java 的安全模型如沙箱机制,适合网络环境;稳定性能够保证企业级应用长期使用,版本更新也比较注重向后兼容。
劣势:性能应该是一个劣势,虽然 JVM 优化了很多,但是相比于 C++ 和 Rust 这种原生编译语言,还是有一定的开销,特别是启动时间,若在微服务环境下可能不如 Go 之类的快;语法较繁琐,比如样板代码多,有了 lambda 之后虽然简洁了些,但是相比 Python 还是有点繁琐;内存消耗较大,JVM 本身就比较占内存,再加上 IDE 如 IDEA 就更占内存了,对于资源有限的环境不太友好 ; 面向对象过于严格有时候写较简单的程序反而比较麻烦,虽然 Java8 引入了函数式编程,但是不如其他语言自然;开发效率相比于 Python 这种动态语言需要更多的代码,编译过程也可能拖慢开发节奏。
2.2 第一个 Java 程序
main 函数
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
显然 Java 的 main 函数比其他编程语言要更麻烦一些,接下来将介绍它的涵义。
在 Java 的世界里,一切皆是对象。上面的代码中,有一个主类 Main,它被 public 关键字所修饰(一个 Java 文件中只能有一个类被该关键字修饰,并且主类的名字必须和文件名相同)。
安装好 JDK 和 IDE 后,就可以运行了,以下是运行结果:
2.3 注释
注释是为了让开发者读懂代码的,不管是给合作伙伴或是自己(隔一段时间后自己也会忘了的),都应该养成写上注释的习惯。
// 单行注释
/* */ 多行注释
/** */ 文档注释