语言基础
2025/8/24大约 4 分钟
语言基础
Java是一种面向对象的编程语言,由Sun Microsystems(现在是Oracle的一部分)于1995年发布。它以"一次编写,到处运行"(Write Once, Run Anywhere)的特性而闻名,通过Java虚拟机(JVM)实现跨平台运行。
语言概述
语言简介
Java是一种高级编程语言,具有以下特点:
- 面向对象:Java是一种纯粹的面向对象语言, everything is an object。
- 平台无关性:通过JVM实现跨平台运行。
- 健壮性:Java提供了强类型检查、异常处理机制等特性,减少了错误。
- 安全性:Java提供了安全管理器、字节码验证等安全机制。
- 多线程:Java内置了多线程支持。
- 高性能:JIT(Just-In-Time)编译器提高了Java程序的执行效率。
发展历程
- 1995年:Java 1.0发布。
- 1998年:Java 2(1.2)发布,引入了集合框架。
- 2004年:Java 5(1.5)发布,引入了泛型、注解、枚举等特性。
- 2006年:Java 6(1.6)发布。
- 2011年:Java 7(1.7)发布,引入了try-with-resources、菱形操作符等特性。
- 2014年:Java 8(1.8)发布,引入了Lambda表达式、Stream API等特性。
- 2017年:Java 9发布,引入了模块化系统。
- 2018年:Java 10发布,引入了局部变量类型推断。
- 2019年:Java 11发布,引入了字符串新方法、HTTP客户端等特性。
- 2020年:Java 15发布,引入了密封类、文本块等特性。
- 2021年:Java 17发布,是长期支持(LTS)版本。
Java应用场景
- 企业级应用开发:使用Spring Boot、Spring Cloud等框架。
- Android应用开发:Android平台使用Java或Kotlin语言。
- 大数据处理:Hadoop、Spark等大数据框架使用Java开发。
- 桌面应用开发:使用JavaFX等技术。
- 游戏开发:使用libGDX等引擎。
JVM架构与运行机制
JVM概述
Java虚拟机(JVM)是一个虚拟的计算机,它解释和执行Java字节码。JVM的主要功能包括:
- 类加载:将.class文件加载到内存中。
- 内存管理:分配和回收内存。
- 字节码执行:解释或编译执行字节码。
- 线程管理:创建和管理线程。
- 安全管理:提供安全检查机制。
JVM内存结构
- 程序计数器(Program Counter Register):记录当前线程执行的字节码行号。
- 虚拟机栈(VM Stack):存储方法调用的栈帧,包含局部变量表、操作数栈等。
- 本地方法栈(Native Method Stack):存储本地方法调用的栈帧。
- 堆(Heap):存储对象实例,是垃圾回收的主要区域。
- 方法区(Method Area):存储类信息、常量、静态变量等。
类加载机制
类加载过程包括:加载、链接(验证、准备、解析)、初始化。
- 加载:通过类的全限定名获取二进制字节流,将其转换为方法区的运行时数据结构。
- 验证:确保Class文件的字节流符合JVM规范。
- 准备:为类变量分配内存并设置初始值。
- 解析:将符号引用转换为直接引用。
- 初始化:执行类构造器
<clinit>()
方法。
垃圾回收机制
垃圾回收(GC)是JVM自动回收不再使用的对象内存的过程。常见的垃圾回收算法包括:
- 标记-清除(Mark-Sweep):标记需要回收的对象,然后清除。
- 标记-整理(Mark-Compact):标记需要回收的对象,然后将存活对象移动到一端,最后清除。
- 复制(Copying):将内存分为两半,只使用其中一半,垃圾回收时将存活对象复制到另一半。
- 分代收集(Generational Collection):将堆分为年轻代和老年代,根据对象的存活时间使用不同的回收算法。
基本数据类型与运算符
基本数据类型
Java提供了8种基本数据类型:
- 整数类型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)
- 浮点类型:float(4字节)、double(8字节)
- 字符类型:char(2字节)
- 布尔类型:boolean(1位)
引用数据类型
- 类(Class)
- 接口(Interface)
- 数组(Array)
常量与变量
- 常量:使用final关键字修饰,值不能改变。
- 变量:分为局部变量和成员变量(实例变量、静态变量)。
运算符
- 算术运算符:+、-、*、/、%、++、--
- 关系运算符:==、!=、>、<、>=、<=
- 逻辑运算符:&&、||、!
- 位运算符:&、|、^、~、<<、>>、>>>
- 赋值运算符:=、+=、-=、*=、/=、%=
- 条件运算符:?:
- instanceof运算符:检查对象是否为某个类的实例
控制流语句
分支语句
- if-else:根据条件执行不同的代码块。
- switch-case:根据表达式的值选择执行的代码块。
循环语句
- for:按照指定次数循环执行代码块。
- while:当条件为真时循环执行代码块。
- do-while:先执行一次代码块,然后当条件为真时循环执行。
- for-each:遍历数组或集合中的元素。
跳转语句
- break:跳出循环或switch语句。
- continue:跳过当前循环的剩余部分,开始下一次循环。
- return:结束方法的执行,并返回一个值(可选)。