javac):检查语法和类型 + 翻译成字节码 .class同一份 Hello.java
│ javac:在哪台电脑编都一样
▼
Hello.class(字节码,各平台完全相同,Mac 编的能拷到 Windows 直接跑)
├─ Windows 版 JVM → Windows 指令
└─ Mac 版 JVM → Mac 指令
▼
结果一样
不同的只有 JVM;装 JDK 时选系统,JVM 就在里面。
int[] a = {1, 2, 3};
System.out.println(a[3]);
javac 编译:没报错java T1 运行:ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3| 题 | 我答 | 结果 |
|---|---|---|
a[3] 编译错还是运行错 |
编译(因为下标只到 2) | ❌ 是运行。下标只到 2 看对了,但编译器不数数组长度 |
int x = "abc"; |
编译,因为 abc 不是 int | ✅ |
编译管「写得对不对」,运行管「跑起来对不对」;编译过 ≠ 运行不出错。