跳至主要內容

Java 基础语法(对比 JavaScript)

Mr.Dingjava语法基础类型系统前端转Java大约 3 分钟约 913 字

Java 基础语法(对比 JavaScript)

1. Hello World

// Java: 一切皆类
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
// JavaScript: 直接运行
console.log("Hello, World!");

关键差异

  • Java 必须有 class 包裹,JS 可以直接写
  • Java 入口必须是 public static void main(String[] args)
  • Java 用 System.out.println(),JS 用 console.log()
  • Java 文件名必须和 public class 名称一致

2. 变量声明与类型

基本类型对比

Java 类型说明JS 对应内存
int32 位整数Number (整数)
long64 位整数BigInt
double64 位浮点数Number
boolean布尔值Boolean
char单个字符String[0]
String字符串(对象)String

声明方式

// Java: 类型在前,名称在后
int age = 25;
String name = "小明";
double price = 19.99;
boolean isActive = true;
final double PI = 3.14;  // const 等效

// Java 10+ 可以用 var 自动推断类型
var message = "hello";   // 编译器推断为 String
// JavaScript: 灵活声明
let age = 25;
const name = "小明";
var price = 19.99;       // 不推荐

前端理解:Java 的类型写在变量名前,类似 TypeScript 的类型注解 let age: number = 25,但 Java 是编译时强制检查,没有 any 逃生舱。


3. 控制流

// if-else (和 JS 几乎一样)
if (score >= 90) {
    System.out.println("优秀");
} else if (score >= 60) {
    System.out.println("及格");
} else {
    System.out.println("不及格");
}

// switch (Java 14+ 支持箭头语法)
switch (day) {
    case 1, 2, 3, 4, 5 -> System.out.println("工作日");
    case 6, 7 -> System.out.println("周末");
    default -> System.out.println("无效");
}

// for 循环
for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

// 增强 for-each(类似 JS for...of)
String[] names = {"A", "B", "C"};
for (String name : names) {
    System.out.println(name);
}

// while (和 JS 完全一样)
while (count < 10) {
    count++;
}

4. 数组

// Java 数组:长度固定,类型统一
int[] numbers = new int[5];           // [0, 0, 0, 0, 0]
int[] scores = {90, 85, 95};          // 初始化
String[] names = {"Alice", "Bob"};

names.length;         // 2 (属性,不是方法)
names[0];             // "Alice"

// JS 数组:长度可变,类型可以混用
const arr = [1, "hello", true];
arr.length;           // 3
arr.push(4);          // Java 数组不支持 push!

注意:Java 数组不是动态的,要动态集合用 ArrayList(见后文)。


5. 方法定义

// Java: 访问修饰符 + 返回类型 + 方法名 + 参数
public class Calculator {
    // 静态方法(类似 JS 的 static)
    public static int add(int a, int b) {
        return a + b;
    }

    // 实例方法
    public String greet(String name) {
        return "Hello, " + name;
    }

    // void 表示无返回值
    public void log(String message) {
        System.out.println(message);
    }
}

// 调用
int sum = Calculator.add(1, 2);
// JavaScript
function add(a, b) {
    return a + b;
}

class Calculator {
    static add(a, b) { return a + b; }
    greet(name) { return `Hello, ${name}`; }
}

6. 字符串操作

String str = "Hello, Java!";

str.length();                    // 12 (方法,不是属性)
str.charAt(0);                   // 'H'
str.substring(0, 5);             // "Hello"
str.contains("Java");            // true
str.replace("Java", "World");   // "Hello, World!"
str.split(", ");                 // ["Hello", "Java!"]
str.toUpperCase();               // "HELLO, JAVA!"
str.trim();                      // 去空格
"hello %s, age %d".formatted(name, age);  // 字符串模板

对比 JS:Java 的 String.length() 是方法,JS 的 .length 是属性。Java 用 + 拼接字符串会有性能问题(不可变),大量拼接用 StringBuilder


7. null 与 Optional

// Java 的 null ≈ JS 的 null
String name = null;

// 但 Java 没有「undefined」的概念
// 访问 null 的方法会抛 NullPointerException (NPE)
name.length();  // ❌ NullPointerException

// Java 8+ 用 Optional 避免 NPE
Optional<String> optional = Optional.ofNullable(name);
optional.ifPresent(System.out::println);   // 有值才打印
String result = optional.orElse("默认值");  // 提供默认值
// JavaScript 既有 null 也有 undefined
let name = null;
let age;       // undefined
name?.length;  // 可选链操作符,安全访问

快速速查

场景JavaJavaScript
声明变量int x = 1;let x = 1;
常量final int X = 1;const X = 1;
打印System.out.println()console.log()
模板字符串"hello %s".formatted(name)hello ${name}
数组长度.length (属性).length (属性)
字符串长度.length() (方法).length (属性)
forEachfor (T item : list)for (const item of arr)
三目运算a > b ? a : ba > b ? a : b
相等判断equals()===
上次编辑于:
贡献者: dingyongya