首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >《JavaSE快速复习笔记》

《JavaSE快速复习笔记》

作者头像
Ynchen
发布2025-12-21 13:32:38
发布2025-12-21 13:32:38
1810
举报

1. 对象相等性:equals()与hashCode()

核心原则
  • equals():默认比较对象内存地址,若需比较对象内容(值相等),必须重写该方法。
  • hashCode():重写 equals() 时必须同时重写 hashCode(),确保在哈希表(如 HashMap)中对象能正确存储。
    • 规则:若 a.equals(b) == true,则 a.hashCode() == b.hashCode()
代码语言:javascript
复制
//示例代码

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;
    return age == person.age && Objects.equals(name, person.name);
}

@Override
public int hashCode() {
    return Objects.hash(name, age); // 使用工具类生成哈希值
}

2. 泛型:类型安全的基石

核心概念
  • 优势:类型安全、代码复用、减少强制类型转换。
  • 通配符
    • <?>:无界通配符(任意类型)。
    • <? extends T>:上界通配符(T及其子类)。
    • <? super T>:下界通配符(T及其父类)。
  • PECS原则(Producer-Extends, Consumer-Super):
    • 生产者(读取数据)用 <? extends T>
    • 消费者(写入数据)用 <? super T>
代码语言:javascript
复制
// 泛型方法示例
public <T> T getFirst(List<T> list) {
    return list.get(0);
}

// PECS应用:集合复制
public static <T> void copy(List<? super T> dest, List<? extends T> src) {
    for (T item : src) dest.add(item);
}

3. 函数式接口与Lambda表达式

四大核心函数式接口

接口

方法

用途

Supplier<T>

T get()

生成数据(如工厂模式)

Consumer<T>

void accept(T t)

消费数据(如打印日志)

Function<T, R>

R apply(T t)

数据转换(如类型映射)

Predicate<T>

boolean test(T t)

条件判断(如集合过滤)

Lambda表达式
  • 语法(参数) -> { 方法体 }
  • 示例
代码语言:javascript
复制
// 替代匿名内部类(Runnable)
Runnable task = () -> System.out.println("Hello Lambda!");

// 集合遍历
List<String> names = Arrays.asList("Alice", "Bob");
names.forEach(name -> System.out.println(name.toUpperCase()));

4. I/O流:数据交互的核心

核心类
  • 字节流InputStreamOutputStream(处理二进制数据)。
  • 字符流ReaderWriter(处理文本数据)。
  • 高效流BufferedReaderBufferedOutputStream(带缓冲区)。
try-with-resources

自动关闭资源,避免内存泄漏:

代码语言:javascript
复制
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

5. 异常处理:优雅的错误管理

异常分类

类型

特点

示例

检查异常

必须显式处理(try/catch)

IOException

非检查异常

无需强制处理

NullPointerException

自定义异常
代码语言:javascript
复制
public class MyException extends RuntimeException {
    public MyException(String message) {
        super(message);
    }
}

6. 多线程与并发编程

线程创建方式

继承Thread类

代码语言:javascript
复制
class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("Thread running!");
    }
}

实现Runnable接口(推荐,避免单继承限制):

代码语言:javascript
复制
new Thread(() -> System.out.println("Runnable task")).start();
线程池(Executor框架)
代码语言:javascript
复制
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.submit(() -> System.out.println("Task 1"));
executor.shutdown(); // 优雅关闭

7. 反射:动态操控类的艺术

核心类
  • Class:类的元数据。
  • Method:方法信息。
  • Field:字段信息。
动态代理示例
代码语言:javascript
复制
public class DebugProxy implements InvocationHandler {
    private final Object target;
    public DebugProxy(Object target) { this.target = target; }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("调用方法: " + method.getName());
        return method.invoke(target, args);
    }
}

8. 注解:元数据的魔法

元注解

注解

作用

@Target

定义注解可应用的目标(如类、方法)

@Retention

定义注解的生命周期(源码、类、运行时)

自定义注解
代码语言:javascript
复制
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    String value() default "default";
}

9. 扩展知识点

Java内存模型(JMM)
  • happens-before原则:保证多线程操作的有序性。
  • volatile关键字:保证变量可见性,禁止指令重排序。
新特性:Stream API
代码语言:javascript
复制
List<Integer> numbers = Arrays.asList(1, 2, 3);
int sum = numbers.stream()
                 .filter(n -> n % 2 == 0)
                 .mapToInt(n -> n)
                 .sum(); // 输出:2
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 1. 对象相等性:equals()与hashCode()
    • 核心原则
  • 2. 泛型:类型安全的基石
    • 核心概念
  • 3. 函数式接口与Lambda表达式
    • 四大核心函数式接口
    • Lambda表达式
  • 4. I/O流:数据交互的核心
    • 核心类
    • try-with-resources
  • 5. 异常处理:优雅的错误管理
    • 异常分类
    • 自定义异常
  • 6. 多线程与并发编程
    • 线程创建方式
    • 线程池(Executor框架)
  • 7. 反射:动态操控类的艺术
    • 核心类
    • 动态代理示例
  • 8. 注解:元数据的魔法
    • 元注解
    • 自定义注解
  • 9. 扩展知识点
    • Java内存模型(JMM)
    • 新特性:Stream API
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档