动态代理(Dynamic Proxy)
Java 动态代理(Dynamic Proxy)一、什么是动态代理Java 动态代理是一种在运行时创建代理类并处理方法调用的机制,它不需要事先写好代理类,而是通过反射 API 动态生成代理对象。 它常用于以下场景: 日志记录 权限控制 性能监控 Spring AOP 实现原理 二、JDK 动态代理原理JDK 动态代理主要依赖两个核心类/接口: java.lang.reflect.Proxy java.lang.reflect.InvocationHandler JDK 动态代理要求被代理的类 必须实现接口。 三、使用步骤1. 定义接口1234java复制编辑public interface UserService { void login(String username); void logout();} 2. 实现该接口的类(目标类)1234567891011java复制编辑public class UserServiceImpl implements UserService { @Override ...
反射机制(Reflection)
Java 反射机制(Reflection)一、什么是反射反射(Reflection) 是 Java 提供的一种机制,它允许程序在运行时动态获取类的信息(方法、属性、构造方法等)以及操作对象本身。 通过反射可以: 在运行时获取类的完整结构 动态创建对象 动态调用方法、访问字段 实现解耦、插件式开发、框架封装等 反射是实现诸如 Spring、MyBatis、Junit、Tomcat、IDEA 插件系统 的核心技术之一。 二、反射的核心类反射主要在 java.lang.reflect 和 java.lang.Class 包中,主要类包括: 类/接口 功能说明 Class<?> 表示类或接口的字节码对象 Field 表示类中的成员变量 Method 表示类中的方法 Constructor 表示类的构造方法 Modifier 表示修饰符工具类 三、反射的基本操作1. 获取类的 Class 对象(3种方式)123456789java复制编辑// 方式一:通过类名.classClass<?> clazz1 =...
Java 线程池(Thread Pool)
Java 线程池(Thread Pool)一、什么是线程池线程池 是一种线程管理机制,用于提前创建并复用固定数量的线程,以避免频繁地创建/销毁线程带来的资源开销。 主要优势包括: 降低资源消耗(复用线程) 提高响应速度(任务提交后可立即执行) 方便管理线程(线程数可控,支持超时、拒绝策略等) 二、线程池的核心类:Executor 和 ThreadPoolExecutorJava 中的线程池定义在 java.util.concurrent 包下,主要接口和类包括: 接口/类名 说明 Executor 线程池顶层接口,定义任务执行方法 ExecutorService 扩展接口,支持任务返回值、关闭池 ThreadPoolExecutor 线程池的核心实现类 Executors 工厂类,用于创建常见线程池 Future 代表异步任务结果 三、使用线程池的三种方式1. 使用 Executors 工厂类(不推荐用于生产)1234567java复制编辑ExecutorService pool =...
I/O流与I/O框架
I/O流与I/O框架全面总结一、Java I/O流基础1. I/O流分类按数据流向 输入流:从数据源读取数据(InputStream/Reader) 输出流:向目标写入数据(OutputStream/Writer) 按数据类型 字节流:以字节为单位(8位),处理二进制数据 InputStream/OutputStream 字符流:以字符为单位(16位),处理文本数据 Reader/Writer 按功能 节点流:直接操作数据源/目标的流 处理流:对现有流进行包装,提供增强功能 2. 核心类体系字节流体系text 123456789101112131415InputStream (抽象类)├─ FileInputStream (文件输入)├─ ByteArrayInputStream (内存数组输入)├─ FilterInputStream (装饰器父类)│ ├─ BufferedInputStream (缓冲流)│ ├─ DataInputStream...
异常和泛型
异常和泛型知识点总结异常处理异常概念 异常是程序运行时发生的不正常情况,会中断正常的指令流 Java中所有异常都继承自Throwable类,分为Error和Exception两大类 异常分类 Error:严重错误,程序无法处理(如内存溢出) Exception: 检查异常(Checked Exception):必须处理(如IOException) 非检查异常(Unchecked Exception/RuntimeException):可选择性处理(如NullPointerException) 异常处理机制 try-catch-finally: java 123456789try { // 可能抛出异常的代码} catch (ExceptionType1 e) { // 处理特定异常} catch (ExceptionType2 e) { // 处理另一种异常} finally { //...
匿名内部类与Lambda表达式
Stream流知识点总结Steam流是Java 8引入的一个强大的API,用于处理集合数据的函数式编程方式。以下是关于Steam流的主要知识点总结: 1. 基本概念 Stream:不是数据结构,而是对数据源(集合、数组等)的高级抽象,用于高效处理大量数据 特点: 不存储数据(只是数据源的视图) 不修改源数据(操作会产生新Stream) 惰性执行(终端操作时才执行) 可消费性(Stream只能被消费一次) 2. 创建Stream的方式java 1234567891011121314// 从集合创建List<String> list = Arrays.asList("a", "b", "c");Stream<String> stream = list.stream();// 从数组创建String[] array = {"a", "b", "c"};Stream<String> stream =...
集合框架概述
集合框架概述Java集合框架(Java Collections Framework)是一组用来存储和操作数据的类和接口,位于java.util包中。它提供了高效的数据结构和算法,简化了程序员的工作。 集合框架主要接口1. Collection接口 (根接口) List:有序集合,元素可重复 Set:无序集合,元素不可重复 Queue:队列,先进先出(FIFO) 2. Map接口 (独立于Collection) 键值对存储结构 主要实现类List接口实现类 ArrayList 基于动态数组实现 随机访问快(O(1)),插入删除慢(O(n)) 线程不安全 LinkedList 基于双向链表实现 插入删除快(O(1)),随机访问慢(O(n)) 实现了Deque接口,可用作队列或栈 Vector 类似ArrayList,但线程安全 性能较差,已被ArrayList取代 Stack...
匿名内部类与Lambda表达式
匿名内部类与Lambda表达式知识点总结匿名内部类基本概念 匿名内部类是没有名字的内部类 用于快速创建某个类或接口的子类/实现类的实例 适合只使用一次的类实现 语法结构java 1234new 父类构造器(参数列表) | 实现接口() { // 匿名内部类的类体部分 方法重写/实现}; 特点 必须继承一个父类或实现一个接口 只能创建一个实例 没有构造方法(但可以有实例初始化块) 可以访问外部类的成员,包括私有成员 如果访问局部变量,该变量必须是final或事实上final的 使用场景 事件监听器 线程实现 需要快速实现某个接口或抽象类 Lambda表达式基本概念 Java 8引入的函数式编程特性 用于简化函数式接口的实现 本质是一个匿名函数 语法结构java 123(parameters) -> expression或(parameters) -> { statements;...
集合框架概述
一、抽象类(Abstract Class)1. 基本特性 使用abstract关键字声明 可以包含抽象方法和具体方法 不能直接实例化(不能new) 可以包含成员变量、构造方法、普通方法 2. 语法结构java 1234567891011121314151617public abstract class Animal { // 成员变量 protected String name; // 构造方法 public Animal(String name) { this.name = name; } // 抽象方法(无实现) public abstract void makeSound(); // 具体方法 public void eat() { System.out.println(name + "正在吃东西"); }} 3....
继承与多态核心知识点总结
继承与多态核心知识点总结1. 继承 (Inheritance)概念: 允许一个类(子类)继承另一个类(父类)的特征和行为 子类可以获得父类的属性和方法,并可以添加新的属性和方法 语法: java 123class 子类 extends 父类 { // 子类特有的属性和方法} 特点: Java是单继承,一个类只能直接继承一个父类 子类继承父类非private的成员(属性和方法) 子类可以重写(override)父类的方法 构造方法不能被继承 关键字: extends:表示继承关系 super:引用父类的成员 super():调用父类构造方法 super.方法名():调用父类方法 示例: java 123456789101112131415161718192021222324252627282930class Animal { String name; public Animal(String name) { this.name = name; } ...