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 的开发模式和生态,提升跨技术栈的开发能力。

相关推荐
天蓝色的鱼鱼7 小时前
零代码Mock神器:json-server 快速上手
前端
鱼鱼块7 小时前
《从零开始掌握CSS盒模型:结构、计算与最佳实践》
前端
子醉7 小时前
html5 input[type=date]如何让日期中的年/月/日改成英文
前端·html·html5
Data_Adventure7 小时前
从前端到 Java 后端:一份详细转型路线指南
前端·后端
绝无仅有7 小时前
某游戏大厂计算机网络面试问题深度解析(一)
后端·面试·架构
神秘的猪头7 小时前
CSS 盒子模型详解:从 `box-sizing` 理解布局本质
前端·javascript
UIUV7 小时前
CSS学习笔记:深入理解盒子模型与 box-sizing
前端·css·前端框架
shepherd1117 小时前
破局延时任务(下):Spring Boot + DelayQueue 优雅实现分布式延时队列(实战篇)
java·spring boot·后端
远山枫谷7 小时前
vue3通信组件学习小记
前端·vue.js