Java实验环境搭建全攻略:从JDK安装到避坑自检
简介这份《Java程序设计实验指导书》面向高校Java课程学习者与授课教师针对上机实验环节目标不清、练习缺乏体系的问题提供从环境搭建到综合应用的完整实验方案。资源为单个doc文档压缩包约530KB内容按Java基础、Java核心与企业级应用选学三部分编排涵盖运行环境安装配置、基本语法、面向对象编程、包与接口及异常处理、数组向量与字符串、常用系统类等实验并延伸至图形界面、流与文件、多线程、网络编程及JDBC、JSP与Servlet等选学模块附有实验目的、要求、内容与课时安排。已有239人学习下载适合需要按68学时进度开展课内实验或课外自学的读者对照练习、巩固知识点。1. 从一台干净机器开始Java 实验环境到底要装什么上周帮一个学弟收拾他电脑上的 Java 环境打开终端敲java -version跳出来三行报错JAVA_HOME指向一个早就被删掉的目录Path里还留着两条互相打架的 JDK 路径。他说实验一的“编写、编译、运行”三步里第一步就卡了整整两天。这不是个例Java 实验环境搭建这件事看着只是装个 JDK、配两个变量实际翻车率极高尤其是照着实验指导书里那套老版本 SDK 的写法去配很容易在新系统上撞墙。这份《Java 程序设计实验指导书》覆盖 8 个实验、68 学时从实验 1 的环境安装一路排到综合练习实验 1 明确要求完成 SDK 下载安装、环境变量设置、编写编译运行源程序还要装 JCreator 并浏览 SDK 自带的 Applet 小程序。也就是说这套环境不是装完 JDK 就完事它还要能跑图形界面、能编译带包结构的代码、能加载 Applet。下面按“装什么版本 → 怎么配 → 怎么验证 → 坏了怎么救”的顺序走一遍新手照着能通熟手能看到版本取舍的坑。2. 版本与工具选型JDK、编辑器与实验指导书的年代差2.1 先定 JDK 版本别直接照抄指导书里的 SDK指导书里反复出现“SDK”这个词那是 JDK 1.4 到 1.6 时代的叫法现在统一叫 JDK。实验内容里涉及 Applet、Vector、Graphics、Thread子类这些 API全部在 JDK 8 里完整保留而 JDK 11 之后 Applet 相关类虽然还在java.desktop模块里但浏览器端已经不支持实验 3 的“创建 Applet 应用小程序”和实验 9 的“Applet 与 Application 合并运行”在 JDK 8 上跑起来最省心。我一般会这样选用途推荐版本理由跑完整 8 个实验JDK 8u202 及以上Applet、AWT/Swing、Vector全部可用无模块化限制只做语法与面向对象实验JDK 17 LTS语法练习、集合、异常、线程都正常编译更快编辑器IntelliJ IDEA 社区版 / VS Code Java 扩展替代指导书里的 JCreator后者在新系统上兼容性差提示如果课程明确要求提交.java源文件并用命令行javac编译那就别用 IDE 的自动构建老老实实走命令行否则实验报告里的编译过程对不上。2.2 安装包从哪来、装到哪Windows 上直接下.exe安装包安装路径不要带空格和中文我习惯统一放C:\dev\jdk8。macOS 用.dmg或直接解压.tar.gz到/Library/Java/JavaVirtualMachines/。Linux 用压缩包解到/usr/local/jdk8。三种系统装完都要做同一件事确认bin目录下有javac和java两个可执行文件。# Linux/macOS 解压安装示例 tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/ mv /usr/local/jdk1.8.0_202 /usr/local/jdk8 # 确认关键文件存在 ls /usr/local/jdk8/bin/javac /usr/local/jdk8/bin/java这段命令做两件事解压到/usr/local/再把版本号目录重命名成短路径jdk8。重命名是为了后面配JAVA_HOME时路径短、不容易写错也方便以后换版本只改一个软链接。ls那行是安装后的第一道自检两个文件都在才说明包完整。3. 环境变量配置三个变量和它们最容易写错的地方3.1 Windows 上的 JAVA_HOME、Path、CLASSPATH实验 1 的“设置环境变量”这一步指导书写得比较简略实际要配三个:: 系统变量里新建 JAVA_HOME C:\dev\jdk8 :: 编辑 Path追加不要覆盖原有内容 %JAVA_HOME%\bin :: CLASSPATH 按需设置实验阶段建议先设成当前目录 CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jarJAVA_HOME是给其他工具和脚本引用的根路径很多构建工具默认读它。Path里加%JAVA_HOME%\bin是为了让系统在任何目录下都能找到javac和java。CLASSPATH开头的.表示当前目录这一条最容易被漏掉漏了之后编译带包结构的类实验 4 的自定义包就会报NoClassDefFoundError。dt.jar和tools.jar在 JDK 8 里还有JDK 9 以后已经移除所以如果你装的是 JDK 17这两项直接不写。注意Path 里如果之前装过别的 JDK先把旧条目删掉再追加否则java -version显示的可能不是你刚装的那个。3.2 macOS 与 Linux 的 profile 写法macOS 和 Linux 把变量写进~/.bash_profile或~/.zshrc取决于你用的 shell。写之前先echo $SHELL确认。# 追加到 ~/.zshrcmacOS 默认或 ~/.bashrcLinux export JAVA_HOME/usr/local/jdk8 export PATH$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport让变量对子进程可见$PATH放在$JAVA_HOME/bin后面是为了让新 JDK 优先于系统自带的旧版本。改完必须source ~/.zshrc或重开终端否则当前会话读不到。这里有个血泪经验CLASSPATH里的.和后面的路径之间用冒号分隔Windows 用分号写混了不会报错但类加载会静默失败排查起来很费时间。3.3 验证变量是否生效echo $JAVA_HOME java -version javac -version三条命令的输出要互相对得上JAVA_HOME指向你装的目录java -version和javac -version版本号一致。如果java有输出而javac提示找不到说明Path只配了 JRE 没配 JDK或者装的是 JRE 包。这一步过了实验 1 的“编写、编译、运行”才有基础。4. 第一个程序的编译运行从 HelloWorld 到带包结构4.1 命令行三步走实验 1 要求“编写、编译 Java 源程序”和“运行 Java 程序”标准流程是三步# 1. 写源文件 cat HelloWorld.java EOF public class HelloWorld { public static void main(String[] args) { System.out.println(Hello, Java Lab); } } EOF # 2. 编译生成 HelloWorld.class javac HelloWorld.java # 3. 运行注意不带 .class 后缀 java HelloWorldjavac负责把.java编译成字节码.classjava负责启动虚拟机加载并执行。运行那步写java HelloWorld而不是java HelloWorld.class这是新手最高频的错。文件名必须和public class的类名完全一致大小写敏感helloworld.java编译不过。4.2 带包结构的编译实验 4 会用到实验 4 要“创建并使用自定义包”包结构下编译和运行的方式不一样# 目录结构src/com/lab/Test.java首行 package com.lab; javac -d out src/com/lab/Test.java java -cp out com.lab.Test-d out让编译器按包名自动在out下生成com/lab/Test.class目录树不写-d的话 class 文件会和源文件混在一起包路径就乱了。运行时-cp out指定类路径根目录后面跟全限定类名com.lab.Test。这两条命令是实验 4 能不能跑通的关键很多人卡在NoClassDefFoundError原因就是-d和-cp没配对。4.3 关于 JCreator 和 Applet 的替代方案指导书实验 1 第六步要求“安装、使用 JCreator 软件”第七步“浏览 SDK 自带的 Applet 应用小程序”。JCreator 是早期 Windows 上的轻量 Java IDE在新系统上安装经常失败我一般直接用 IntelliJ IDEA 社区版替代新建项目时选 JDK 8把指导书里的代码贴进去就能跑。Applet 部分JDK 8 自带appletviewer工具可以脱离浏览器运行# 编译后直接用 appletviewer 打开含 applet 标签的 HTML appletviewer demo.htmlappletviewer读 HTML 里的applet code...标签启动一个独立窗口显示 Applet实验 3 和实验 9 的 Applet 练习用它验证最稳。JDK 11 以后这个工具被移除所以这也是我建议整套实验用 JDK 8 的原因之一。5. 避坑与排查五条装环境时真踩过的坑5.1 现象java -version正常javac找不到原因装的是 JRE 而不是 JDK或者Path里只加了 JRE 的bin。解决确认安装目录下有javac没有就重装 JDK 包有的话检查Path里%JAVA_HOME%\bin是否在 JRE 路径之前。5.2 现象编译报“编码 GBK 的不可映射字符”原因源文件是 UTF-8Windows 默认按 GBK 读。解决编译时显式指定编码javac -encoding UTF-8 HelloWorld.java或者把源文件存成 GBK。我一般统一用-encoding UTF-8避免中文注释乱码。5.3 现象带包的类运行时报NoClassDefFoundError原因-d输出目录和-cp类路径根目录不一致或者运行时用了相对路径但当前目录不对。解决编译用javac -d out ...运行用java -cp out 全限定类名两者指向同一个out目录。5.4 现象CLASSPATH配了之后当前目录的类反而找不到原因CLASSPATH开头漏了.或者用了分号但系统是 Linux。解决Windows 用.;%JAVA_HOME%\lib\...Linux/macOS 用.:$JAVA_HOME/lib/...开头的点不能省。5.5 现象Applet 在浏览器里打不开原因现代浏览器早已移除 Java 插件支持。解决改用appletviewer命令行工具或者把 Applet 逻辑改写成JFrame应用实验 7 的 Swing 部分正好覆盖。这不是环境配错是技术栈本身变了别在这上面耗时间。6. 装完怎么验证一套五分钟跑通的检查清单环境装完别急着写实验报告先花五分钟把下面这套检查走一遍能提前暴露九成的配置问题。我习惯把它存成一个check.sh每次换机器或重装 JDK 都跑一次。#!/bin/bash # Java 实验环境自检脚本 echo JAVA_HOME echo $JAVA_HOME echo java 版本 java -version 21 echo javac 版本 javac -version 21 echo 编译运行测试 TMP$(mktemp -d) cat $TMP/Check.java EOF public class Check { public static void main(String[] args) { System.out.println(env ok: System.getProperty(java.version)); } } EOF javac -encoding UTF-8 -d $TMP $TMP/Check.java java -cp $TMP Check echo 带包结构测试 mkdir -p $TMP/src/com/lab cat $TMP/src/com/lab/PkgCheck.java EOF package com.lab; public class PkgCheck { public static void main(String[] args) { System.out.println(package ok); } } EOF javac -encoding UTF-8 -d $TMP/out $TMP/src/com/lab/PkgCheck.java java -cp $TMP/out com.lab.PkgCheck rm -rf $TMP脚本分四段打印JAVA_HOME和两个版本号确认变量和工具链一致编译运行一个无包类验证最基本的javacjava链路再编译运行一个带package com.lab的类验证-d和-cp的配合。最后清理临时目录。四段全绿实验 1 到实验 4 的环境基础就没问题了。如果某一段红了按第 5 章的排查顺序对号入座版本号不一致查Path顺序无包类失败查javac是否存在带包类失败查-d和-cp是否指向同一目录。这套脚本我用了好几年比对着指导书一步步肉眼核对快得多也可靠得多。从那以后我每次给新机器配 Java 实验环境都强制先跑一遍这个自检脚本再动代码省下来的时间够多写两个实验。希望帮到你。本文还有配套的精品资源点击获取