跳至主要內容
this

this 是函数运行时的上下文对象,不由定义位置决定,而由调用方式决定。通俗说:谁调用函数,this 就指向谁(箭头函数除外)。

1. this 的指向

函数执行时会在内部创建两个特殊变量:

  • arguments:实参的类数组对象
  • this:当前执行上下文中的 this 绑定
function test() {
  console.log(this);
}

const objA = {
  a: test,
  b: {
    c: test,
  },
};

test();       // window(浏览器)/ global(Node)
objA.a();     // objA
objA.b.c();   // objA.b(只看直接调用者,不看外层对象)

Mr.Ding大约 3 分钟javascriptthiscallapplybind
hooks

hooks的使用

为什么要用Hook?

1.在组件之间复用状态逻辑很难

  • Hook 使你在无需修改组件结构的情况下复用状态逻辑。

2.复杂组件变得难以理解

  • Hook 将组件中相互关联的部分拆分成更小的函数(比如设置订阅或请求数据),而并非强制按照生命周期划分。你还可以使用 reducer 来管理组件的内部状态,使其更加可预测。

Mr.Ding大约 4 分钟ReactHooksuseStateuseEffect
Java 集合框架(对比 JavaScript)

概览:JS 集合 vs Java 集合

场景 JavaScript Java 说明
动态数组 Array ArrayList 最常用
链表 LinkedList 插入/删除快
集合(去重) Set HashSet 都一样
有序集合 TreeSet 自动排序
键值对 Map HashMap 都一样
有序 Map LinkedHashMap 按插入顺序
队列 Array (模拟) Queue / Deque BFS 必备
Array (模拟) Deque (ArrayDeque) DFS 用
不可变 Object.freeze List.of(), Collections.unmodifiableList() -

Mr.Ding大约 3 分钟java集合框架Collections前端转Java
异常处理 & I/O(对比 JavaScript)

一、异常处理

1. try-catch-finally

try {
    // 可能出问题的代码
    int result = 10 / 0;
    System.out.println("这行不会执行");
} catch (ArithmeticException e) {
    // 捕获特定异常
    System.out.println("除数不能为0: " + e.getMessage());
} catch (Exception e) {
    // 捕获通用异常(范围从窄到宽)
    System.out.println("其他异常: " + e.getMessage());
} finally {
    // 始终执行(类似 JS 的 finally)
    System.out.println("清理资源");
}

Mr.Ding大约 4 分钟java异常处理I/O前端转Java
Java 文件后缀全解析

一图概览

                      Java 项目文件生态
                ┌────────────────────────────┐
                │  源代码 (.java)              │
                │      ↓ javac 编译             │
                │  字节码 (.class)              │
                │      ↓ 打包                   │
                │  ┌─────┴──────┐              │
                │  │ .jar       │ .war         │
                │  └─────┬──────┘              │
                │        ↓                      │
                │  Java -jar  /  Tomcat 启动    │
                └────────────────────────────┘
                           +
                ┌────────────────────────────┐
                │  构建配置                   │
                │  pom.xml (Maven)           │
                │  build.gradle (Gradle)     │
                │  application.yml           │
                └────────────────────────────┘

Mr.Ding大约 4 分钟java项目结构编译构建JVM
Java 基础语法(对比 JavaScript)

1. Hello World

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

Mr.Ding大约 3 分钟java语法基础类型系统前端转Java
Java 学习路线 — 前端开发者视角

为什么学 Java?

作为一名前端开发者,学习 Java 能带来:

  • 类型系统:从 JS 的动态类型到 Java 的静态类型,建立更严谨的编程思维
  • 后端能力:用 Spring Boot 构建 REST API,替代 Node.js/Express
  • 生态认知:Maven/Gradle、ORM、IoC 容器等企业级开发范式
  • 职业扩展:全栈/后端岗位机会

Mr.Ding大约 1 分钟java学习路线前端转Java
Lambda & Stream API(对比 JavaScript 数组方法)

为什么说这是前端的「舒适区」?

Java Stream API 和 JS 数组方法(map/filter/reduce)的思想几乎完全一致。如果熟悉 JS 的函数式编程,这部分会非常容易上手。


1. Lambda 表达式(≈ JS 箭头函数)

// Java Lambda 语法
// (参数) -> { 方法体 }

// 单行可以省略 {} 和 return
(参数) -> 表达式

// 示例
(int x, int y) -> x + y           // 两个参数
(String name) -> System.out.println(name)  // 一个参数,无返回值
() -> Math.random()                // 无参数
x -> x * 2                         // 单个参数可省略 ()

Mr.Ding大约 4 分钟javaLambdaStream函数式编程前端转Java
Maven(对比 npm/pnpm)

为什么需要构建工具?

前端 Java
npm/pnpm/yarn Maven/Gradle
package.json pom.xml
npm install mvn install / Maven 自动下载
node_modules/ ~/.m2/repository/ (本地仓库)
npm scripts Maven lifecycle (phase)
webpack/vite 构建 mvn package 构建 jar/war
package-lock.json pom.xml + 版本锁定

Mr.Ding大约 3 分钟javaMaven构建工具前端转Java
Java 面向对象编程(对比 JavaScript)

1. Class 定义对比

// Java
public class Person {
    // 字段 (Field)
    private String name;
    private int age;

    // 构造器 (Constructor)
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 方法 (Method)
    public void sayHello() {
        System.out.println("你好,我是" + name);
    }

    // Getter / Setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

// 使用
Person p = new Person("小明", 25);
p.sayHello();

Mr.Ding大约 4 分钟java面向对象OOP前端转Java