🎯 本章你会学到:JDK / JRE / JVM 的关系、javac 与 java 两条命令、类名与文件名的规则。建议边读边敲,每节练习先自己做,再展开答案对照。
Java 程序的运行方式和 C/C++ 不同:源码先编译成**字节码**(.class),再由 JVM 解释/即时编译执行。所以同一份 .class 能在 Windows、Linux、macOS 上跑——这就是“一次编写,到处运行”的含义。
第一个程序
Main.java
public class Main {
public static void main(String[] args) {
System.out.println("Hello, Java");
}
}运行结果
Hello, Java
编译并运行
javac -encoding UTF-8 Main.java # 编译,产生 Main.class
java Main # 运行(注意不带 .class)
javac是编译器(JDK 自带),java是启动器;只装 JRE 就没有javac。.java文件名必须和public类名完全一致(包括大小写)——Main.java里只能有一个public class Main。main的签名是固定的:public static void main(String[] args),少一个修饰符都不能作为入口。
命令行参数
读取命令行参数
public class Main {
public static void main(String[] args) {
int sum = 0;
for (String arg : args) {
sum += Integer.parseInt(arg); // 字符串转整数
}
System.out.println("args=" + args.length);
System.out.println("sum=" + sum);
}
}输入
1 2 3运行结果
args=3
sum=6
⚠️ 易错点
public class Main 写在 hello.java 里会直接编译报错:文件名必须与 public 类名一致。⚠️ 易错点 运行写
java Main.class 是错的,java 接的是类名;javac 才接文件名。✍️ 本节练习
1.1必做读一行并回显
用 Scanner 读入一行文字,输出 hello, 加上这行文字。
输入 一行文字。
输出 一行 hello, 原内容。
样例输入
world样例输出
hello, world💡 提示 new Scanner(System.in).nextLine() 读整行;next() 只读到空白为止。
✅ 查看参考答案与解析
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
System.out.println("hello, " + line);
}
}解析 nextLine() 读整行(含空格),next() 遇到空白就停——这是 Java 里最常见的输入坑。
1.2挑战两数之和
读入两个整数,输出它们的和。
输入 一行两个整数 a b。
输出 一行 sum=结果。
样例输入
3 5样例输出
sum=8💡 提示 sc.nextInt() 一次读一个整数,可以连着读多个。
✅ 查看参考答案与解析
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println("sum=" + (a + b));
}
}解析 注意 "sum=" + a + b 会把数字当字符串拼接(得 sum=35),要加括号 (a + b) 才是先算加法。
📚 本文概念都在知识大全:
JVM 与字节码 · JDK · String 与 StringBuilder · 集合框架 · 泛型 · 受检异常 · 继承与接口 · record · Stream API