30天学会Java-01:Java入门与环境配置

1. Java简介、发展史、应用领域

1.1 Java简介

Java 是一种由 Sun Microsystems 公司(现已被 Oracle 收购)于 1995 年发布的面向对象的编程语言。它以其“一次编写,到处运行”(Write Once, Run Anywhere, WORA)的特性而闻名,这意味着用 Java 编写的程序可以在任何支持 Java 的平台上运行,无需重新编译。

Java 的设计目标是:

  • 简单性:易于学习和使用。
  • 面向对象:支持面向对象编程的所有核心概念。
  • 分布式:支持网络编程,易于构建分布式应用。
  • 健壮性:具有强大的错误检查和异常处理机制。
  • 安全性:内置安全机制,防止恶意代码的攻击。
  • 体系结构中立:不依赖于特定的硬件或操作系统。
  • 可移植性:编译后的字节码可以在任何 Java 虚拟机(JVM)上运行。
  • 高性能:通过即时编译(JIT)技术实现高性能。
  • 多线程:支持多线程编程,提高程序并发性。
  • 动态性:能够在运行时动态加载类和对象。

1.2 Java发展史

  • 1991年:Sun Microsystems 的詹姆斯·高斯林(James Gosling)等人启动“Green Project”,旨在开发一种用于家用电器的新语言,最初命名为 Oak。
  • 1995年:Oak 更名为 Java,并正式发布 Java 1.0 版本,提出“一次编写,到处运行”的口号。
  • 1996年:发布 JDK 1.0,Java 语言迅速获得关注。
  • 1998年:发布 J2SE 1.2(后改名为 Java SE 1.2),引入了 Swing、Collections Framework 等重要特性。
  • 2000年:发布 J2SE 1.3,性能和稳定性进一步提升。
  • 2002年:发布 J2SE 1.4,引入了 NIO、正则表达式、XML 解析等。
  • 2004年:发布 J2SE 5.0(内部版本号为 1.5),这是一个里程碑版本,引入了泛型、注解、枚举、自动装箱/拆箱、可变参数、增强型 for 循环等大量新特性。
  • 2006年:发布 Java SE 6,改进了性能和稳定性,并提供了更好的 Web 服务支持。
  • 2011年:发布 Java SE 7,引入了对动态语言的支持、try-with-resources 语句、NIO.2 等。
  • 2014年:发布 Java SE 8,又一个里程碑版本,引入了 Lambda 表达式、Stream API、新的日期时间 API 等,极大地简化了并发编程和集合操作。
  • 2017年:发布 Java SE 9,引入了模块化系统(Jigsaw 项目),改进了性能和安全性。
  • 2018年至今:Java 采用半年发布一次新版本的策略,陆续发布了 Java 10, 11 (LTS), 12, 13, 14, 15, 16, 17 (LTS) 等版本,持续引入新特性和改进。

1.3 Java应用领域

Java 语言因其跨平台、高性能和丰富的生态系统,在众多领域都有广泛应用:

  • 企业级应用开发:Java EE (Enterprise Edition) 是开发大型、分布式、高并发企业级应用的首选平台,广泛应用于金融、电信、电子商务等领域。Spring、Spring Boot、Hibernate 等框架是其核心。
  • Android 移动应用开发:Android 应用程序主要使用 Java(或 Kotlin)进行开发。Java 在 Android 生态系统中扮演着核心角色。
  • 大数据技术:Hadoop、Spark、Kafka 等许多流行的大数据技术都是用 Java(或 Scala,运行在 JVM 上)编写的,Java 在大数据处理中占据重要地位。
  • Web 应用开发:Java Servlets、JSP、Spring MVC、Spring Boot 等技术栈广泛用于构建各种规模的 Web 应用程序。
  • 桌面应用开发:虽然不如 Web 和移动应用流行,但 JavaFX 和 Swing 仍然可以用于开发跨平台的桌面应用程序。
  • 游戏开发:Minecraft 等知名游戏就是用 Java 开发的。Java 在游戏开发领域也有一定的应用。
  • 嵌入式系统:Java ME (Micro Edition) 曾用于开发嵌入式设备和移动电话应用。
  • 云计算:Java 在云计算平台和微服务架构中扮演着重要角色,许多云服务和工具都支持 Java。

2. JDK安装与配置(环境变量)

2.1 什么是JDK、JRE、JVM?

在安装和配置 Java 开发环境之前,我们需要理解几个核心概念:

  • JVM (Java Virtual Machine):Java 虚拟机。它是 Java 程序的运行环境,负责将 Java 字节码(.class 文件)解释或编译成特定平台的机器码并执行。JVM 是 Java 跨平台能力的核心。
  • JRE (Java Runtime Environment):Java 运行时环境。它包含了 JVM 和 Java 核心类库(如 java.lang, java.util 等)。如果你只是想运行 Java 程序,那么安装 JRE 就足够了。
  • JDK (Java Development Kit):Java 开发工具包。它是 Java 开发的核心,包含了 JRE、JVM 以及开发 Java 应用程序所需的工具,如编译器(javac)、打包工具(jar)、调试工具(jdb)等。如果你需要开发 Java 程序,就必须安装 JDK。

简单来说:JDK = JRE + 开发工具JRE = JVM + 核心类库

2.2 JDK下载

  1. 访问 Oracle 官方网站的 Java SE 下载页面:
  2. 选择你需要的 JDK 版本。通常建议下载最新的 LTS (Long-Term Support) 版本,例如 Java 11 或 Java 17,因为它们会获得更长时间的支持和更新。
  3. 根据你的操作系统(Windows, macOS, Linux)和系统架构(x64, ARM64)选择对应的安装包。
  4. 接受许可协议并下载。

2.3 JDK安装

安装过程通常非常简单,按照安装向导的指示一步步操作即可。

  • Windows:双击下载的 .exe 安装包,然后按照提示点击“下一步”直到安装完成。你可以选择安装路径,建议选择一个不包含中文和空格的路径,例如 C:\Program Files\Java\jdk-17
  • macOS:双击下载的 .dmg 文件,然后双击 .pkg 安装包,按照提示完成安装。macOS 通常会将 JDK 安装到 /Library/Java/JavaVirtualMachines/ 目录下。
  • Linux:下载 .tar.gz 压缩包后,解压到你选择的目录,例如 /usr/local/java/jdk-17。具体命令如下:
    sudo mkdir -p /usr/local/java
    sudo tar -zxvf jdk-*-linux-x64.tar.gz -C /usr/local/java/
    

2.4 配置环境变量

配置环境变量的目的是让操作系统能够找到 Java 相关的命令(如 javajavac),无论你在哪个目录下执行它们。

2.4.1 Windows 系统
  1. 找到 JDK 安装路径:例如 C:\Program Files\Java\jdk-17
  2. 打开系统属性:右键点击“此电脑”或“我的电脑” -> “属性” -> “高级系统设置” -> “环境变量”。
  3. 新建 JAVA_HOME 变量
    • 在“系统变量”区域,点击“新建”。
    • 变量名:JAVA_HOME
    • 变量值:你的 JDK 安装路径(例如 C:\Program Files\Java\jdk-17
    • 点击“确定”。
  4. 编辑 Path 变量
    • 在“系统变量”区域,找到并选中 Path 变量,点击“编辑”。
    • 点击“新建”,然后输入 %JAVA_HOME%\bin
    • %JAVA_HOME%\bin 移动到列表的顶部,确保它优先被查找。
    • 点击“确定”保存所有更改。
2.4.2 macOS 系统

macOS 通常会自动配置好 Java 路径,但如果需要手动配置或切换 JDK 版本,可以编辑 shell 配置文件(如 ~/.bash_profile, ~/.zshrc~/.profile)。

  1. 打开终端
  2. 编辑配置文件
    • 如果你使用 Bash:nano ~/.bash_profilevim ~/.bash_profile
    • 如果你使用 Zsh(macOS Catalina 及更高版本默认):nano ~/.zshrcvim ~/.zshrc
  3. 添加以下内容
    export JAVA_HOME=$(/usr/libexec/java_home)
    export PATH=$JAVA_HOME/bin:$PATH
    
    • $(/usr/libexec/java_home) 会自动找到当前系统默认的 JDK 路径。如果你安装了多个 JDK 版本并想指定特定版本,可以手动设置 JAVA_HOME,例如:
      export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
  4. 保存并退出文件
  5. 使配置生效
    • 如果你编辑的是 ~/.bash_profilesource ~/.bash_profile
    • 如果你编辑的是 ~/.zshrcsource ~/.zshrc
2.4.3 Linux 系统

编辑 /etc/profile 文件(对所有用户生效)或 ~/.bashrc / ~/.profile 文件(对当前用户生效)。建议编辑 /etc/profile

  1. 打开终端
  2. 编辑配置文件sudo nano /etc/profilesudo vim /etc/profile
  3. 在文件末尾添加以下内容
    # Java Environment Variables
    export JAVA_HOME=/usr/local/java/jdk-17 # 替换为你的JDK实际安装路径
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    
    • CLASSPATH 变量用于指定 Java 虚拟机查找类文件的路径,. 表示当前目录。
  4. 保存并退出文件
  5. 使配置生效source /etc/profile

2.5 验证安装

打开一个新的命令行窗口(或终端),输入以下命令来验证 JDK 是否安装成功并配置正确:

java -version
javac -version

如果显示了 Java 和 Javac 的版本信息,说明 JDK 已成功安装并配置完成。


3. 第一个Java程序:Hello World

现在,我们来编写并运行第一个 Java 程序。

3.1 编写源代码

  1. 创建文件:在你的电脑上创建一个新的文本文件,命名为 HelloWorld.java。请确保文件名与类名完全一致(包括大小写),并且文件扩展名为 .java

  2. 编写代码:用任何文本编辑器(如 VS Code, Sublime Text, Notepad++ 等)打开 HelloWorld.java 文件,并输入以下代码:

    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello, World!");
        }
    }
    

    代码解释

    • public class HelloWorld:定义了一个公共类,类名为 HelloWorld。Java 程序的入口点必须在一个公共类中。
    • public static void main(String[] args):这是 Java 程序的主方法,是程序执行的起点。它是:
      • public:公共的,意味着可以从任何地方访问。
      • static:静态的,意味着可以通过类名直接调用,无需创建类的实例。
      • void:表示方法不返回任何值。
      • main:方法的名称,Java 虚拟机就是从这里开始执行程序的。
      • String[] args:命令行参数,允许你在运行程序时向其传递信息。
    • System.out.println("Hello, World!");:这是一个输出语句,用于在控制台打印“Hello, World!”字符串。System.out 代表标准输出流,println 表示打印一行并换行。

3.2 编译程序

  1. 打开命令行窗口:导航到你保存 HelloWorld.java 文件的目录。

  2. 编译:使用 javac 命令编译源代码文件。如果编译成功,会在同目录下生成一个 HelloWorld.class 文件(字节码文件)。

    javac HelloWorld.java
    

    如果出现错误,请检查你的代码是否有拼写错误、标点符号错误,或者环境变量是否配置正确。

3.3 运行程序

  1. 运行:使用 java 命令运行编译后的字节码文件。注意,这里不需要 .class 扩展名。

    java HelloWorld
    
  2. 查看输出:如果一切顺利,你将在命令行窗口看到输出:

    Hello, World!
    

恭喜你,你已经成功编写并运行了你的第一个 Java 程序!


4. Java程序运行机制

Java 程序的运行机制是其“一次编写,到处运行”特性的基础。它主要涉及到以下几个步骤和组件:

  1. 编写 Java 源代码 (.java 文件)
    开发者使用 Java 语言编写程序,保存为 .java 扩展名的文本文件。这些文件包含了人类可读的指令。

  2. 编译 (javac 命令)
    Java 编译器(javac)将 .java 源代码文件编译成平台无关的字节码文件.class 文件)。字节码是一种中间代码,它不直接在操作系统上运行,而是在 Java 虚拟机(JVM)上运行。这个阶段会检查语法错误。

    • 源代码 (HelloWorld.java) – javac --> 字节码 (HelloWorld.class)
  3. 类加载器 (Class Loader)
    当 Java 程序运行时,JVM 的类加载器负责查找并加载 .class 文件到内存中。类加载器遵循特定的加载机制(如双亲委派模型),确保类的安全性和唯一性。

  4. 字节码校验器 (Bytecode Verifier)
    在字节码加载到内存后,字节码校验器会对字节码进行检查,确保其符合 Java 语言规范和 JVM 规范,没有安全问题或格式错误。这是 Java 安全性的重要组成部分。

  5. 解释器 (Interpreter) 和 即时编译器 (JIT Compiler)
    JVM 包含解释器和即时编译器(Just-In-Time Compiler)。

    • 解释器:逐行解释字节码并执行。这种方式启动速度快,但执行效率相对较低。

    • JIT 编译器:为了提高执行效率,JVM 会监控程序的运行情况。对于频繁执行的代码(“热点代码”),JIT 编译器会将其编译成特定平台的机器码,并缓存起来。下次再执行这部分代码时,就可以直接运行机器码,从而大大提高执行速度。这个过程被称为“动态编译”。

    • 字节码 (HelloWorld.class) – JVM (解释器/JIT) --> 机器码 – 操作系统/硬件 --> 执行

  6. 运行时数据区 (Runtime Data Areas)
    JVM 在运行程序时会划分出不同的内存区域,用于存储程序运行时的数据,包括:

    • 方法区 (Method Area):存储类信息、常量、静态变量等。
    • 堆 (Heap):存储对象实例和数组。这是 Java 内存管理的核心区域,也是垃圾回收的主要作用区域。
    • 虚拟机栈 (VM Stack):存储方法调用的栈帧,每个栈帧包含局部变量表、操作数栈、动态链接、方法出口等。
    • 本地方法栈 (Native Method Stack):为 Native 方法(非 Java 语言实现的方法)服务。
    • 程序计数器 (Program Counter Register):存储当前线程正在执行的字节码指令的地址。
  7. 垃圾回收器 (Garbage Collector)
    Java 具有自动内存管理机制,即垃圾回收。当堆中的对象不再被引用时,垃圾回收器会自动回收这些对象占用的内存,无需程序员手动管理内存,从而避免了内存泄漏和野指针等问题。

总结流程

Java源代码 (.java) --(javac编译)–> Java字节码 (.class) --(JVM加载、校验、解释/JIT编译)–> 机器码 --(操作系统执行)–> 程序运行结果

这种机制使得 Java 具有了强大的跨平台能力和相对高效的执行性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明似水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值