JDK的下载与安装:从入门到精通_jdk下载
一、什么是JDK?
JDK(Java Development Kit)是Java开发工具包的缩写,它是Java开发的核心组件。JDK不仅包含了Java运行环境(JRE),还包含了一系列开发工具(如编译器javac、调试器jdb等)和基础类库。
JDK组成结构
#mermaid-svg-JHcGN6RykQypWQMA {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JHcGN6RykQypWQMA .error-icon{fill:#552222;}#mermaid-svg-JHcGN6RykQypWQMA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JHcGN6RykQypWQMA .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-JHcGN6RykQypWQMA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JHcGN6RykQypWQMA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JHcGN6RykQypWQMA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JHcGN6RykQypWQMA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JHcGN6RykQypWQMA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JHcGN6RykQypWQMA .marker.cross{stroke:#333333;}#mermaid-svg-JHcGN6RykQypWQMA svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JHcGN6RykQypWQMA .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-JHcGN6RykQypWQMA .cluster-label text{fill:#333;}#mermaid-svg-JHcGN6RykQypWQMA .cluster-label span{color:#333;}#mermaid-svg-JHcGN6RykQypWQMA .label text,#mermaid-svg-JHcGN6RykQypWQMA span{fill:#333;color:#333;}#mermaid-svg-JHcGN6RykQypWQMA .node rect,#mermaid-svg-JHcGN6RykQypWQMA .node circle,#mermaid-svg-JHcGN6RykQypWQMA .node ellipse,#mermaid-svg-JHcGN6RykQypWQMA .node polygon,#mermaid-svg-JHcGN6RykQypWQMA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-JHcGN6RykQypWQMA .node .label{text-align:center;}#mermaid-svg-JHcGN6RykQypWQMA .node.clickable{cursor:pointer;}#mermaid-svg-JHcGN6RykQypWQMA .arrowheadPath{fill:#333333;}#mermaid-svg-JHcGN6RykQypWQMA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-JHcGN6RykQypWQMA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-JHcGN6RykQypWQMA .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-JHcGN6RykQypWQMA .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-JHcGN6RykQypWQMA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-JHcGN6RykQypWQMA .cluster text{fill:#333;}#mermaid-svg-JHcGN6RykQypWQMA .cluster span{color:#333;}#mermaid-svg-JHcGN6RykQypWQMA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-JHcGN6RykQypWQMA :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} JDK JRE 开发工具 JVM 核心类库 javac java javadoc jdb
二、JDK下载指南
1. 选择JDK版本
目前主流版本有:
- Java 8(LTS长期支持版)
- Java 11(LTS)
- Java 17(LTS)
- 最新版本(如Java 21)
对于初学者,建议选择Java 11或Java 17,因为它们都是长期支持版本。
2. 下载步骤
- 访问Oracle官网:https://www.oracle.com/java/technologies/
- 选择\"Java SE\"(标准版)
- 点击\"JDK Download\"
- 选择适合你操作系统的版本(Windows、macOS、Linux等)
- 接受许可协议
- 点击下载链接
注意:从Java 11开始,Oracle提供了两种JDK发行版:
- Oracle JDK(商业用途需要许可证)
- OpenJDK(完全开源)
三、JDK安装详解
Windows系统安装
- 双击下载的.exe安装文件
- 按照向导提示操作
- 选择安装路径(建议使用默认路径)
- 等待安装完成
环境变量配置:
- 右键\"此电脑\" → 属性 → 高级系统设置 → 环境变量
- 在系统变量中新建:
- 变量名:
JAVA_HOME
- 变量值:JDK安装路径(如
C:\\Program Files\\Java\\jdk-17.0.1
)
- 变量名:
- 编辑Path变量,添加:
%JAVA_HOME%\\bin
%JAVA_HOME%\\jre\\bin
macOS系统安装
- 双击下载的.dmg文件
- 将JDK图标拖到Applications文件夹
- 打开终端验证:
java -version
Linux系统安装
- 下载.tar.gz压缩包
- 解压到指定目录:
tar -xzf jdk-17_linux-x64_bin.tar.gz -C /usr/local/
- 配置环境变量(编辑~/.bashrc或/etc/profile):
export JAVA_HOME=/usr/local/jdk-17.0.1export PATH=$JAVA_HOME/bin:$PATH
- 使配置生效:
source ~/.bashrc
四、验证安装
在命令行/终端中执行以下命令:
java -versionjavac -version
成功安装会显示类似信息:
java version \"17.0.1\" 2021-10-19 LTSJava(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing)
五、JDK目录结构解析
安装后的JDK目录结构如下:
jdk-17.0.1/├── bin/ # 可执行文件├── conf/ # 配置文件├── include/ # C语言头文件├── jmods/ # JMOD模块文件├── legal/ # 法律声明├── lib/ # 库文件└── README.html # 说明文档
重要目录详解
-
bin目录:包含所有命令行工具
- javac:Java编译器
- java:Java应用程序启动器
- javadoc:API文档生成器
- jdb:Java调试器
- jconsole:Java监控和管理控制台
-
lib目录:包含开发工具使用的附加库
- tools.jar:工具类库
- dt.jar:DesignTime归档,包含Swing组件
-
include目录:本地接口编程(JNI)所需的C/C++头文件
六、Java API解析
Java API是Java开发的核心,它包含了数千个预定义的类和接口,组织在不同的包中。
常用核心包
#mermaid-svg-kXbq0Tgnq3vXP8uK {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kXbq0Tgnq3vXP8uK .error-icon{fill:#552222;}#mermaid-svg-kXbq0Tgnq3vXP8uK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kXbq0Tgnq3vXP8uK .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-kXbq0Tgnq3vXP8uK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kXbq0Tgnq3vXP8uK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kXbq0Tgnq3vXP8uK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kXbq0Tgnq3vXP8uK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kXbq0Tgnq3vXP8uK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kXbq0Tgnq3vXP8uK .marker.cross{stroke:#333333;}#mermaid-svg-kXbq0Tgnq3vXP8uK svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kXbq0Tgnq3vXP8uK .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kXbq0Tgnq3vXP8uK .cluster-label text{fill:#333;}#mermaid-svg-kXbq0Tgnq3vXP8uK .cluster-label span{color:#333;}#mermaid-svg-kXbq0Tgnq3vXP8uK .label text,#mermaid-svg-kXbq0Tgnq3vXP8uK span{fill:#333;color:#333;}#mermaid-svg-kXbq0Tgnq3vXP8uK .node rect,#mermaid-svg-kXbq0Tgnq3vXP8uK .node circle,#mermaid-svg-kXbq0Tgnq3vXP8uK .node ellipse,#mermaid-svg-kXbq0Tgnq3vXP8uK .node polygon,#mermaid-svg-kXbq0Tgnq3vXP8uK .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kXbq0Tgnq3vXP8uK .node .label{text-align:center;}#mermaid-svg-kXbq0Tgnq3vXP8uK .node.clickable{cursor:pointer;}#mermaid-svg-kXbq0Tgnq3vXP8uK .arrowheadPath{fill:#333333;}#mermaid-svg-kXbq0Tgnq3vXP8uK .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kXbq0Tgnq3vXP8uK .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kXbq0Tgnq3vXP8uK .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-kXbq0Tgnq3vXP8uK .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-kXbq0Tgnq3vXP8uK .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kXbq0Tgnq3vXP8uK .cluster text{fill:#333;}#mermaid-svg-kXbq0Tgnq3vXP8uK .cluster span{color:#333;}#mermaid-svg-kXbq0Tgnq3vXP8uK div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kXbq0Tgnq3vXP8uK :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} Java API 基础类库 网络编程 数据库连接 图形界面 并发编程 java.lang java.util java.io java.math java.net java.sql javax.sql java.awt javax.swing java.util.concurrent
重要API示例
1. java.lang包
这是最基础的包,自动导入到每个Java程序中。
// String类示例String str = \"Hello, JDK!\";System.out.println(str.length()); // 输出字符串长度System.out.println(str.substring(7)); // 输出\"JDK!\"
2. java.util包
包含集合框架、日期时间工具等。
// ArrayList示例List<String> list = new ArrayList<>();list.add(\"Java\");list.add(\"JDK\");list.add(\"API\");System.out.println(list.get(1)); // 输出\"JDK\"
3. java.io包
输入输出相关功能。
// 文件读写示例try (BufferedReader reader = new BufferedReader(new FileReader(\"test.txt\"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); }} catch (IOException e) { e.printStackTrace();}
七、JDK底层原理探秘
Java编译与执行流程
#mermaid-svg-W1W3oFqATSgzFSCN {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-W1W3oFqATSgzFSCN .error-icon{fill:#552222;}#mermaid-svg-W1W3oFqATSgzFSCN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-W1W3oFqATSgzFSCN .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-W1W3oFqATSgzFSCN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-W1W3oFqATSgzFSCN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-W1W3oFqATSgzFSCN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-W1W3oFqATSgzFSCN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-W1W3oFqATSgzFSCN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-W1W3oFqATSgzFSCN .marker.cross{stroke:#333333;}#mermaid-svg-W1W3oFqATSgzFSCN svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-W1W3oFqATSgzFSCN .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-W1W3oFqATSgzFSCN text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-W1W3oFqATSgzFSCN .actor-line{stroke:grey;}#mermaid-svg-W1W3oFqATSgzFSCN .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-W1W3oFqATSgzFSCN .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-W1W3oFqATSgzFSCN #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-W1W3oFqATSgzFSCN .sequenceNumber{fill:white;}#mermaid-svg-W1W3oFqATSgzFSCN #sequencenumber{fill:#333;}#mermaid-svg-W1W3oFqATSgzFSCN #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-W1W3oFqATSgzFSCN .messageText{fill:#333;stroke:#333;}#mermaid-svg-W1W3oFqATSgzFSCN .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-W1W3oFqATSgzFSCN .labelText,#mermaid-svg-W1W3oFqATSgzFSCN .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-W1W3oFqATSgzFSCN .loopText,#mermaid-svg-W1W3oFqATSgzFSCN .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-W1W3oFqATSgzFSCN .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-W1W3oFqATSgzFSCN .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-W1W3oFqATSgzFSCN .noteText,#mermaid-svg-W1W3oFqATSgzFSCN .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-W1W3oFqATSgzFSCN .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-W1W3oFqATSgzFSCN .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-W1W3oFqATSgzFSCN .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-W1W3oFqATSgzFSCN .actorPopupMenu{position:absolute;}#mermaid-svg-W1W3oFqATSgzFSCN .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-W1W3oFqATSgzFSCN .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-W1W3oFqATSgzFSCN .actor-man circle,#mermaid-svg-W1W3oFqATSgzFSCN line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-W1W3oFqATSgzFSCN :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 开发者 javac JVM 操作系统 编写Java源代码(.java) 编译为字节码(.class) 类加载 字节码验证 解释执行/JIT编译 执行机器指令 开发者 javac JVM 操作系统
JVM内存模型
#mermaid-svg-1kuLoBYjmWaAnTrH {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1kuLoBYjmWaAnTrH .error-icon{fill:#552222;}#mermaid-svg-1kuLoBYjmWaAnTrH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1kuLoBYjmWaAnTrH .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-1kuLoBYjmWaAnTrH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1kuLoBYjmWaAnTrH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1kuLoBYjmWaAnTrH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1kuLoBYjmWaAnTrH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1kuLoBYjmWaAnTrH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1kuLoBYjmWaAnTrH .marker.cross{stroke:#333333;}#mermaid-svg-1kuLoBYjmWaAnTrH svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1kuLoBYjmWaAnTrH .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1kuLoBYjmWaAnTrH .cluster-label text{fill:#333;}#mermaid-svg-1kuLoBYjmWaAnTrH .cluster-label span{color:#333;}#mermaid-svg-1kuLoBYjmWaAnTrH .label text,#mermaid-svg-1kuLoBYjmWaAnTrH span{fill:#333;color:#333;}#mermaid-svg-1kuLoBYjmWaAnTrH .node rect,#mermaid-svg-1kuLoBYjmWaAnTrH .node circle,#mermaid-svg-1kuLoBYjmWaAnTrH .node ellipse,#mermaid-svg-1kuLoBYjmWaAnTrH .node polygon,#mermaid-svg-1kuLoBYjmWaAnTrH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1kuLoBYjmWaAnTrH .node .label{text-align:center;}#mermaid-svg-1kuLoBYjmWaAnTrH .node.clickable{cursor:pointer;}#mermaid-svg-1kuLoBYjmWaAnTrH .arrowheadPath{fill:#333333;}#mermaid-svg-1kuLoBYjmWaAnTrH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1kuLoBYjmWaAnTrH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1kuLoBYjmWaAnTrH .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-1kuLoBYjmWaAnTrH .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-1kuLoBYjmWaAnTrH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1kuLoBYjmWaAnTrH .cluster text{fill:#333;}#mermaid-svg-1kuLoBYjmWaAnTrH .cluster span{color:#333;}#mermaid-svg-1kuLoBYjmWaAnTrH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1kuLoBYjmWaAnTrH :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} JVM内存 方法区 堆 虚拟机栈 本地方法栈 程序计数器 类信息 常量池 对象实例 数组 栈帧 局部变量表 操作数栈 动态链接 方法出口
类加载机制
Java类加载采用双亲委派模型:
#mermaid-svg-CohVVJ4SUXny3z2n {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CohVVJ4SUXny3z2n .error-icon{fill:#552222;}#mermaid-svg-CohVVJ4SUXny3z2n .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CohVVJ4SUXny3z2n .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-CohVVJ4SUXny3z2n .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CohVVJ4SUXny3z2n .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CohVVJ4SUXny3z2n .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CohVVJ4SUXny3z2n .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CohVVJ4SUXny3z2n .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CohVVJ4SUXny3z2n .marker.cross{stroke:#333333;}#mermaid-svg-CohVVJ4SUXny3z2n svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CohVVJ4SUXny3z2n .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-CohVVJ4SUXny3z2n .cluster-label text{fill:#333;}#mermaid-svg-CohVVJ4SUXny3z2n .cluster-label span{color:#333;}#mermaid-svg-CohVVJ4SUXny3z2n .label text,#mermaid-svg-CohVVJ4SUXny3z2n span{fill:#333;color:#333;}#mermaid-svg-CohVVJ4SUXny3z2n .node rect,#mermaid-svg-CohVVJ4SUXny3z2n .node circle,#mermaid-svg-CohVVJ4SUXny3z2n .node ellipse,#mermaid-svg-CohVVJ4SUXny3z2n .node polygon,#mermaid-svg-CohVVJ4SUXny3z2n .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CohVVJ4SUXny3z2n .node .label{text-align:center;}#mermaid-svg-CohVVJ4SUXny3z2n .node.clickable{cursor:pointer;}#mermaid-svg-CohVVJ4SUXny3z2n .arrowheadPath{fill:#333333;}#mermaid-svg-CohVVJ4SUXny3z2n .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CohVVJ4SUXny3z2n .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CohVVJ4SUXny3z2n .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-CohVVJ4SUXny3z2n .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-CohVVJ4SUXny3z2n .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CohVVJ4SUXny3z2n .cluster text{fill:#333;}#mermaid-svg-CohVVJ4SUXny3z2n .cluster span{color:#333;}#mermaid-svg-CohVVJ4SUXny3z2n div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CohVVJ4SUXny3z2n :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 应用程序类加载器 扩展类加载器 启动类加载器
类加载过程:
- 加载:查找并加载类的二进制数据
- 验证:确保类文件格式正确
- 准备:为静态变量分配内存并设置默认值
- 解析:将符号引用转换为直接引用
- 初始化:执行静态初始化代码和静态初始化块
八、JDK工具链详解
1. javac编译器
基本用法:
javac HelloWorld.java
常用选项:
-d
:指定输出目录-cp
或-classpath
:指定类路径-verbose
:输出详细编译信息
2. java启动器
基本用法:
java HelloWorld
常用选项:
-Xmx
:设置最大堆内存(如-Xmx512m
)-Xms
:设置初始堆内存-verbose:gc
:输出GC详细信息
3. javap反编译器
查看字节码:
javap -c HelloWorld
4. jconsole监控工具
启动Java监控和管理控制台:
jconsole
九、实际开发示例
示例1:使用JDK编译运行程序
- 创建HelloWorld.java文件:
public class HelloWorld { public static void main(String[] args) { System.out.println(\"Hello, JDK!\"); }}
- 编译:
javac HelloWorld.java
- 运行:
java HelloWorld
示例2:使用JDK API处理日期
import java.time.LocalDate;import java.time.format.DateTimeFormatter;public class DateExample { public static void main(String[] args) { LocalDate today = LocalDate.now(); System.out.println(\"Today: \" + today); LocalDate nextWeek = today.plusWeeks(1); DateTimeFormatter formatter = DateTimeFormatter.ofPattern(\"yyyy/MM/dd\"); System.out.println(\"Next week: \" + nextWeek.format(formatter)); }}
十、常见问题解答
Q1:如何选择JDK版本?
A:生产环境建议选择LTS版本(如Java 11或17),学习可以使用最新版本体验新特性。
Q2:安装后java命令可用但javac不可用?
A:这通常是因为只安装了JRE而没有安装JDK,或者环境变量配置不正确。
Q3:如何查看JDK默认使用的垃圾回收器?
A:使用命令:
java -XX:+PrintCommandLineFlags -version
Q4:如何设置编译时的编码?
A:使用javac的-encoding
选项:
javac -encoding UTF-8 MyClass.java
结语
JDK是Java开发的基石,掌握其下载、安装和核心组件的使用是每个Java开发者的必备技能。本文从实践出发,详细介绍了JDK的各个方面,希望能帮助你顺利开始Java开发之旅。随着对Java的深入学习,你会发现JDK中还有更多强大的功能和工具等待探索。