
equals() 时必须同时重写 hashCode(),确保在哈希表(如 HashMap)中对象能正确存储。
a.equals(b) == true,则 a.hashCode() == b.hashCode()。
//示例代码
@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); // 使用工具类生成哈希值
}<?>:无界通配符(任意类型)。
<? extends T>:上界通配符(T及其子类)。
<? super T>:下界通配符(T及其父类)。
<? extends T>。
<? super T>。
// 泛型方法示例
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);
}接口 | 方法 | 用途 |
|---|---|---|
Supplier<T> | T get() | 生成数据(如工厂模式) |
Consumer<T> | void accept(T t) | 消费数据(如打印日志) |
Function<T, R> | R apply(T t) | 数据转换(如类型映射) |
Predicate<T> | boolean test(T t) | 条件判断(如集合过滤) |
(参数) -> { 方法体 }
// 替代匿名内部类(Runnable)
Runnable task = () -> System.out.println("Hello Lambda!");
// 集合遍历
List<String> names = Arrays.asList("Alice", "Bob");
names.forEach(name -> System.out.println(name.toUpperCase()));InputStream、OutputStream(处理二进制数据)。
Reader、Writer(处理文本数据)。
BufferedReader、BufferedOutputStream(带缓冲区)。
自动关闭资源,避免内存泄漏:
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();
}类型 | 特点 | 示例 |
|---|---|---|
检查异常 | 必须显式处理(try/catch) | IOException |
非检查异常 | 无需强制处理 | NullPointerException |
public class MyException extends RuntimeException {
public MyException(String message) {
super(message);
}
}继承Thread类:
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread running!");
}
}实现Runnable接口(推荐,避免单继承限制):
new Thread(() -> System.out.println("Runnable task")).start();ExecutorService executor = Executors.newFixedThreadPool(2);
executor.submit(() -> System.out.println("Task 1"));
executor.shutdown(); // 优雅关闭Class:类的元数据。
Method:方法信息。
Field:字段信息。
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);
}
}注解 | 作用 |
|---|---|
@Target | 定义注解可应用的目标(如类、方法) |
@Retention | 定义注解的生命周期(源码、类、运行时) |
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
String value() default "default";
}List<Integer> numbers = Arrays.asList(1, 2, 3);
int sum = numbers.stream()
.filter(n -> n % 2 == 0)
.mapToInt(n -> n)
.sum(); // 输出:2