开始之前 · 环境准备
环境准备与 SSH 连接
用 Windows 终端连接自己的阿里云服务器,加载课程 JDK 17,建立练习目录,学会 nano 保存、编译与运行。全程在服务器上操作,网页不执行命令、不接收密码。
这一页只做一件事:把你的电脑连到你自己的阿里云服务器,确认 JDK 17 能用,然后建好练习目录。后面的 12 节都假设你已经完成这一页。
先记住一句话:网页只是教程,不是在线编译器。 你在网页上看到的 Java 代码和命令,都要复制到右边的 SSH 终端里,在服务器上编译、运行。网页不会执行代码,不会连接服务器,也不会接收密码。
1. 打开终端,连接服务器
在 Windows 上打开 Windows Terminal(开始菜单搜索“终端”或“Windows Terminal”),用默认的 PowerShell 标签即可。Windows 10/11 自带 ssh 命令,不需要额外安装。
在终端里输入下面这一行,不要照着网页复制尖括号里的示例 IP:
$ ssh root@<你的阿里云公网IP>
把 <你的阿里云公网IP> 整个替换成你自己服务器的公网 IP,尖括号 < > 不要保留。例如你的 IP 是 203.0.113.10,就输入 ssh root@203.0.113.10。
- 用户名是
root,这是阿里云服务器常见的登录账号。 - 密码就是你平时登录这台服务器的那个密码。本文和网页都不会写出、保存或显示密码。
- 输入密码时屏幕上不会出现星号或字符,这是 Linux 的正常行为;输完直接按
Enter。 - 第一次连接会问
Are you sure you want to continue connecting (yes/no)?,确认主机名/IP 是你自己的服务器后输入yes再回车。 - 如果你平时用密钥登录,就按你原来的方式登录;本页不提供、也不需要把密钥写进网页。
登录成功后,最后一行会出现类似下面的提示符,表示你已经在这台服务器上了:
root@your-server:~#
提示符的样子会随主机名和配置变化,可能是 root@host:~#,也可能是别的。提示符不是命令的一部分,不要复制它。 本页为了统一,命令示例前面用 $ 表示“这是在终端里输入”;你的 root 窗口实际可能显示 #,$ 和 # 都只是提示符。
2. 每次新开终端,先加载 JDK 17
服务器默认的 PATH 里故意没有 Java,避免影响服务器上的其它服务。所以每开一个新的 SSH 窗口,都要先执行一次:
$ source ~/java-practice/env.sh
看到类似下面的提示,说明加载成功:
Java 学习环境已就绪:javac 17.0.20.1 (JAVA_HOME=/opt/java-learning/jdk17/usr/lib/jvm/java-17-openjdk-amd64)
然后检查两个命令:
$ java -version
$ javac -version
预期输出(版本号应为 17.0.20.1):
openjdk version "17.0.20.1" 2026-08-18
OpenJDK Runtime Environment (build 17.0.20.1+1-1-26.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 17.0.20.1+1-1-26.04-Ubuntu, mixed mode, sharing)
javac 17.0.20.1
说明:
java -version把版本信息写到标准错误(stderr),所以看起来像“红字”或“错误输出”,这不是报错。- 只要看到
17.0.20.1就可以继续;如果看到command not found,说明这个窗口还没source,回到本节第一行再执行一次。 - 不要用
apt install自己安装 JDK。服务器上还有别的服务,装错版本会影响别人;课程环境已经准备好了。 source只影响当前这个终端窗口。关掉窗口或新开一个 SSH 标签,要重新执行一次;重复执行不会把 PATH 叠加两次。
如果你不想每次 source,也可以用一个等价的入口命令:
$ java-lab
它会进入一个已经配好 JDK 17 的子 shell。注意:在 java-lab 里输入 exit,只退出这个子 shell,回到你原来的 SSH 登录 shell;再输入一次 exit,才会断开服务器。用 source 的方式则没有这层子 shell,exit 一次就断开 SSH。
3. 建练习目录,先看有没有旧文件
先建一个自己的练习目录。mkdir -p 的意思是“目录不存在就创建,已经存在也不报错”;cd 进入目录;pwd 显示当前所在位置。
$ mkdir -p ~/java-practice/hello
$ cd ~/java-practice/hello
$ pwd
预期输出(pwd 应显示你的家目录下的 java-practice/hello):
/root/java-practice/hello
在写文件之前,先看看目录里有没有同名的旧文件:
$ ls -la
如果看到已经有 Hello.java,不要直接覆盖或删除它。Linux 不会像 Windows 那样自动帮你保留旧版本;下面的命令只在文件存在时把它改名备份,文件名带时间戳,不会覆盖已有的备份:
$ if [ -e Hello.java ]; then mv Hello.java "Hello.java.bak.$(date +%s)"; fi
这条命令不会删除任何文件:文件不存在时它什么也不做;存在时只是改名。备份之后,你可以用 ls -la 看到 Hello.java.bak.数字,旧内容还在。
4. 用 nano 写 Hello.java
nano 是服务器上最简单的文本编辑器。**nano 要单独占一个命令块**:如果你把 nano Hello.java 和后面的 javac 一起粘贴,编辑器会把后面的命令当成文件内容,看起来像“卡住”。
$ nano Hello.java
打开后,把下面这一整段 Java 源码粘贴进去:
public class Hello {
public static void main(String[] args) {
System.out.println("你好,Java!");
}
}
粘贴后按下面的顺序保存并退出:
- 按
Ctrl+O(字母 O,不是数字 0),屏幕底部会问文件名; - 直接按
Enter确认; - 按
Ctrl+X退出编辑器。
记不住就念一遍:Ctrl+O、Enter、Ctrl+X。
几个必须注意的点:
- 文件名必须是
Hello.java,大写 H。Linux 区分大小写,hello.java、Hello.Java都不行。 - Java 里
public class Hello的类名必须和文件名一致;这个类叫Hello,文件就只能叫Hello.java。 - 文件内容里不要写终端提示符
$或#,也不要写nano的命令;只放 Java 源码。 - 你不需要在 Windows 上安装 Java 或 IDEA。
javac和java都在服务器上运行,Windows 只负责显示终端。
如果你粘贴时终端提示“是否粘贴多行”,选择允许粘贴即可。Windows Terminal 里通常可以右键粘贴,也可以按 Ctrl+Shift+V;复制网页内容可以用鼠标选中后 Ctrl+C。粘贴进 nano 后,先检查花括号和引号有没有缺。
5. 编译,再运行
先编译:
$ javac -encoding UTF-8 Hello.java
这条命令把 Hello.java 编译成 Hello.class。-encoding UTF-8 是告诉编译器源码是 UTF-8,源码里有中文时更稳妥。编译成功时没有任何输出,直接回到提示符,这是正常的。
再运行:
$ java Hello
预期输出:
你好,Java!
java 后面写类名 Hello,不要写 Hello.class,也不要写 java Hello.java。前者是“运行已经编译好的类”,后者是另一种源码启动方式,本课程统一使用“先 javac 编译、再 java 运行”的两步法,便于你看清每一步在做什么。
如果编译报错,先看报错里的文件名和行号,再回到 nano 修改:
class Hello is public, should be declared in a file named Hello.java:文件名和类名不一致,检查大小写。error: cannot find symbol:某个单词拼错了,或者少写了分号/括号。error: reached end of file while parsing:花括号没有成对闭合。
改完保存(Ctrl+O、Enter、Ctrl+X),再重新执行 javac 和 java。
6. 程序停下来等你输入,不是死机
后面用到 Scanner 的课,程序运行后会停住,等你从键盘输入。比如屏幕出现“请输入姓名:”时,程序是在正常等待输入,不是服务器卡死。
在终端里输入内容,按 Enter,程序就会继续。按 Ctrl+C 可以强制结束你自己正在运行的这个 Java 程序,回到 shell 提示符;它不会关掉服务器,也不会影响别人的服务。只有在程序等待输入或运行太久时,才需要这样做。
网页上的 output 块是“预期输出”,只读,不能复制;input 块是“程序需要的输入示例”,也是只读。不要把输出或输入当成命令粘贴回终端。
7. 这套环境的边界
- JDK 是 OpenJDK 17.0.20.1,课程以 Java SE 17 为运行基线;JDK 8/11 的常见写法可以编译运行,JDK 21 独有的预览特性不保证可用。
- 没有 IDE、图形界面、Maven/Gradle;编译错误是
javac的英文输出,行号是准的。 - 本阶段课程不涉及用 Java 访问 HTTPS 网站。这个解包环境没有生成完整的
cacerts证书库,自己写 HTTPS 客户端会报证书错误;这是环境限制,不是本课程要解决的问题,也不影响javac/java的基础练习。 - 服务器上原有的 nginx、MySQL 学习库等服务和数据库都不要动;本课程只使用
~/java-practice下的练习目录。
8. 每次回来先做这三步
新开一个终端窗口时,按顺序做:
$ ssh root@<你的阿里云公网IP>
$ source ~/java-practice/env.sh
$ java -version && javac -version
看到 17.0.20.1,就可以回到课程目录,从下一节继续。如果 source 说找不到文件,或者版本不是 17,先停在 setup 页排查,不要自己装 JDK,也不要改系统环境。