Java 与 TypeScript 的核心对比

Java 与 TypeScript 的核心对比

本文面向有 TypeScript 基础的开发者,通过实际代码示例,系统梳理 Java 与 TypeScript 在语法、结构、类型系统、运行方式等方面的主要差异。内容聚焦于知识迁移和技术扩展,帮助你高效理解 Java 的开发模式和生态。

1. 语法与结构

Java 强调面向对象,所有代码都需写在类(class)中,包(package)声明与文件夹结构严格对应。

示例:

java 复制代码
package org.example;
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}

TypeScript 语法更灵活,可直接编写函数和变量,模块系统不依赖文件夹结构。

示例:

typescript 复制代码
function helloWorld() {
    console.log("Hello, TypeScript!");
}
helloWorld();

2. 编译与运行方式

Java 代码需编译为字节码(.class),由 JVM 运行,main 方法为程序入口。

命令行示例:

复制代码
javac HelloWorld.java
java org.example.HelloWorld

TypeScript 编译为 JavaScript,可直接在浏览器或 Node.js 运行,无固定入口。

命令行示例:

复制代码
tsc helloWorld.ts
node helloWorld.js

3. 类型系统

Java 是静态类型语言,类型检查严格,运行时类型不可变。

示例:

java 复制代码
int num = 10;
num = "string"; // 编译错误

TypeScript 支持类型推断和断言,类型系统更灵活。

示例:

typescript 复制代码
let num: number = 10;
num = "string"; // 编译错误
let anyValue: any = 10;
anyValue = "string"; // 允许

4. 访问修饰符

Java 提供 public、private、protected、包级等访问控制,成员默认包级可见。

示例:

java 复制代码
public class Person {
    private String name;
    protected int age;
    String address; // 包级可见
    public void sayHello() {}
}

TypeScript 仅有 public、private、protected,成员默认 public。

示例:

typescript 复制代码
class Person {
    private name: string;
    protected age: number;
    public address: string;
    sayHello() {}
}

5. 异常处理

Java 强制异常处理(checked exception),需用 try-catch 或 throws 声明。

示例:

java 复制代码
public void readFile() throws IOException {
    // ...
}
try {
    readFile();
} catch (IOException e) {
    e.printStackTrace();
}

TypeScript 仅有运行时异常,不强制处理。

示例:

typescript 复制代码
function readFile() {
    throw new Error("IO error");
}
try {
    readFile();
} catch (e) {
    console.error(e);
}

6. 泛型与继承

Java 泛型为类型擦除,运行时不可用类型信息,仅支持单继承。

示例:

java 复制代码
List<String> list = new ArrayList<>();
// 运行时无法获取泛型类型
class Animal {}
class Dog extends Animal {} // 单继承

TypeScript 泛型为编译期类型,支持多接口实现。

示例:

typescript 复制代码
function identity<T>(arg: T): T {
    return arg;
}
interface Animal {}
interface Pet {}
class Dog implements Animal, Pet {} // 多接口实现

7. 枚举

Java 枚举类型功能强大,可定义方法和属性。

示例:

java 复制代码
enum Color {
    RED, GREEN, BLUE;
    public String hex() {
        switch(this) {
            case RED: return "#FF0000";
            case GREEN: return "#00FF00";
            case BLUE: return "#0000FF";
            default: return "#000000";
        }
    }
}

TypeScript 枚举仅为一组命名常量。

示例:

typescript 复制代码
enum Color {
    Red = "#FF0000",
    Green = "#00FF00",
    Blue = "#0000FF"
}

8. 接口与抽象类

Java 接口可定义默认方法,抽象类可包含实现。

示例:

java 复制代码
interface Animal {
    void speak();
    default void sleep() {
        System.out.println("Sleeping...");
    }
}
abstract class Pet {
    abstract void play();
    void feed() {
        System.out.println("Feeding...");
    }
}

TypeScript 接口只定义结构,抽象类可包含实现。

示例:

typescript 复制代码
interface Animal {
    speak(): void;
}
abstract class Pet {
    abstract play(): void;
    feed() {
        console.log("Feeding...");
    }
}

9. 注解与装饰器

Java 注解用于元数据和框架扩展。

示例:

java 复制代码
@interface MyAnnotation {
    String value();
}
@MyAnnotation("test")
public class Demo {}

TypeScript 装饰器用于类、方法、属性的元编程。

示例:

typescript 复制代码
function MyDecorator(target: Function) {
    // ...
}
@MyDecorator
class Demo {}

10. 并发与异步

Java 通过线程和并发库实现多线程。

示例:

java 复制代码
class MyTask extends Thread {
    public void run() {
        System.out.println("Running in thread");
    }
}
new MyTask().start();

TypeScript 通过 Promise/async/await 实现异步。

示例:

typescript 复制代码
async function myTask() {
    await new Promise(resolve => setTimeout(resolve, 1000));
    console.log("Running async");
}
myTask();

11. 模块化与依赖管理

Java 使用 package/module 组织代码,依赖通过 Maven/Gradle 管理。 TypeScript 使用 ESModule/CommonJS,依赖通过 npm/yarn 管理。

12. 生态与应用场景

Java 主要用于后端服务、企业应用、Android 移动开发、大数据等。 TypeScript 主要用于前端开发、Node.js 服务、跨平台应用等。

13. 主流开发模式

Java 强调面向对象、设计模式、类型安全。 TypeScript 强调灵活性、类型推断、快速迭代。

14. 知识迁移与协同应用

本文聚焦于帮助 TypeScript 开发者理解 Java 的核心语法和特性,便于知识迁移和技术扩展。实际开发中,Java 和 TypeScript 常常协同应用,例如前端采用 TypeScript,后端采用 Java。通过对比学习,可以更高效地掌握 Java 的开发模式和生态,提升跨技术栈的开发能力。

相关推荐
崔庆才丨静觅18 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
爬山算法19 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
崔庆才丨静觅19 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment19 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅19 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊19 小时前
jwt介绍
前端
爱敲代码的小鱼19 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax
Cobyte20 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
NEXT0620 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
剪刀石头布啊20 小时前
生成随机数,Math.random的使用
前端