计算机语言的历史及Java的历史地位
第一代语言
- 打孔机 - 纯机器语言
第二代语言
- 汇编
第三代语言
- C、Pascal、Fortran:面向过程的语言
- C++:面向过程/面向对象
- Java:跨平台的纯面向对象语言
- .NET:跨语言的平台
Java自身的发展史
起源与初期发展
Java的开发始于1991年,由James Gosling领导的Sun Microsystems团队提出,最初的名字为“Oak”,目的是用于消费电子设备中的嵌入式系统。1995年,Java 1.0正式发布,并成为面向互联网和企业级应用开发的编程语言。
关键版本演变
- Java 1.0 (1995):Java初次发布,具备“编写一次,随处运行”的核心理念。
- Java 2 (1998):引入了三大平台版本:J2SE(标准版)、J2EE(企业版)、J2ME(移动版),增强了面向企业和移动设备的开发。
- Java 5 (2004):引入泛型、枚举、增强型for循环等语言特性,极大提升了语言的灵活性与表达力。
- Java 8 (2014):最具革命性的一次更新,引入了Lambda表达式、Streams API等新特性,极大提升了并发和函数式编程的支持。
- Java 9及以后:Java 9推出模块化系统(Project Jigsaw),Java 10引入局部变量类型推断,Java 11成为长期支持版(LTS)。
Oracle收购与开源
2010年,Oracle收购了Sun Microsystems,并接管了Java的发展。Java逐步转向开源社区驱动,Java SE平台下的OpenJDK成为Java的官方参考实现。
Java体系
- Java SE(Standard Edition):提供核心的Java库和API,涵盖语言基础、数据结构、并发、多线程、文件处理等,适用于桌面应用和核心后端开发。
- Java EE(Enterprise Edition):侧重于企业级应用开发,提供了分布式计算、Web服务、数据库交互、JMS消息处理等特性。
- Java ME(Micro Edition):适用于嵌入式和移动设备的精简版Java,过去用于开发功能手机和嵌入式系统。
- JavaFX:用于构建现代用户界面应用,替代Swing和AWT,适用于桌面和移动应用的UI开发。
Java的特点
- 跨平台性(“一次编写,随处运行”):Java程序通过编译成字节码,依赖于JVM(Java虚拟机)运行,确保在不同操作系统上可移植。
- 面向对象:Java完全支持面向对象的编程理念,具有封装、继承和多态等特性,便于构建模块化和可扩展的应用。
- 安全性:Java提供了强大的安全机制,如字节码校验、沙箱模型和权限管理,尤其适用于网络环境中的应用程序。
- 垃圾回收机制:Java自动管理内存分配和释放,通过垃圾回收器(Garbage Collector)有效回收不再使用的对象,避免内存泄漏。
- 多线程支持:Java原生支持多线程编程,允许开发者在程序中处理多个任务,提高程序的执行效率。
- 丰富的标准库:Java提供了一个庞大的标准类库,涵盖I/O、网络编程、数据结构、并发控制、GUI开发等领域。
Java的运行机制
- 编译过程:Java代码首先被编译为中间字节码(bytecode),存储在
.class
文件中。字节码独立于底层硬件和操作系统。 - JVM(Java虚拟机):Java程序的字节码在各个平台的JVM中运行。JVM负责解释字节码并将其转换为机器代码,以便在特定平台上执行。
- JIT(即时编译器):JVM内含的JIT编译器在运行时将频繁执行的字节码块动态编译为本地机器代码,从而提高性能。
- 垃圾回收(Garbage Collection):JVM管理对象的内存分配和回收,自动处理对象的生命周期,防止内存泄漏。通过标记-清除(Mark-and-Sweep)、标记-压缩等算法实现。
- 类加载器(ClassLoader):Java使用类加载器动态加载类到内存。类加载器负责将字节码文件加载到JVM内存,并对其进行字节码校验,保证代码的正确性和安全性。
Java运行环境的安装与配置
windows部署JDK
现在可以执行第一个程序了
新建一个
Hello.txt
, 在文件内输入1
2
3
4
5public class Hello {
public static void main(String[] args) {
System.out.print("Hello, World!");
}
}文件名后缀改为
.java
在命令行执行:
1
2
3
4
5javac Hello.java
java Hello
# 命令行输出:
Hello, World!注意:
javac
是对Hello.java
文件进行编译生成可执行的.class
文件的命令, 此时直接在此执行对应的java
是执行程序的命令- 文件名与类名必须相同