创建线程的两种方式:继承 Thread vs 实现 Runnable
1. 继承 Thread 类12345678910111213class MyThread extends Thread { @Override public void run() { System.out.println("线程运行中:" + Thread.currentThread().getName()); }}public class Demo { public static void main(String[] args) { MyThread t1 = new MyThread(); t1.start(); // 启动线程 }} 特点:每个线程对象独立,run() 方法写在子类中,使用 start() 启动。 2. 实现 Runnable 接口1234567891011121314class MyRunnable implements Runnable { @Override ...
枚举类型应用场景:状态定义、策略模式与统一返回码
场景 1:状态 / 类型定义(最常用!)用枚举定义订单状态、用户角色、支付方式等,避免魔法数字和字符串。 123456public enum OrderStatus { PENDING, // 待处理 SHIPPED, // 已发货 DELIVERED, // 已签收 CANCELLED // 已取消} 优点:类型安全,IDE 自动补全,重构方便。 使用示例: 1234567public class Order { private OrderStatus status; public void setStatus(OrderStatus status) { this.status = status; }} 场景 2:策略模式(替换大量 if/else)用枚举实现策略模式,每个枚举值代表一种计算方式或处理逻辑。 12345678910111213141516171819202122public enum Operation...
Java 匿名内部类的使用场景:从回调到Lambda
1. 什么是匿名内部类?匿名内部类(Anonymous Inner Class)是 Java 中一种特殊的局部内部类,它没有类名,使用 new 关键字直接实例化一个接口或抽象类,并同时实现其方法。语法形式: 123接口名 对象名 = new 接口名() { // 实现接口方法}; 匿名内部类本质上是语法糖,编译后会生成一个单独的 .class 文件(如 Outer$1.class)。 2. 主要使用场景2.1 事件处理(GUI 编程)在 Swing 或 Android 开发中,按钮点击、键盘事件等通过监听器处理。匿名内部类可以直接在组件上注册事件,代码紧凑。 123456button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("按钮被点击"); }}); 2.2 线程创建快速启动...
形式化方法与UML建模:从理论到实践的学习路径
1. 什么是形式化方法1.1 定义形式化方法(Formal Methods)是一类基于严格数学理论的软件开发技术,用于描述、开发和验证计算机系统。它通过数学符号、公式和推理规则,对软件系统的行为和性质进行精确的建模与分析。 1.2 核心思想形式化方法的核心在于用数学语言描述系统,而非自然语言。自然语言(如需求文档)容易产生歧义,而数学语言具有唯一性和无二义性,能够精确表达系统的行为和约束。 1.3 主要技术 形式规约:用数学语言描述系统应该做什么。常见的有 Z 语言、VDM、B 方法等。 形式验证:用数学推理证明系统满足规约,包括模型检测(Model Checking)和定理证明(Theorem Proving)。 精化(Refinement):从抽象规约逐步推导出具体实现,保证正确性在每一步得到保持。 1.4 应用领域形式化方法主要用于对正确性要求极高的领域,如航空航天、轨道交通、医疗设备、芯片设计、金融交易系统等。 1.5 优缺点优点: 精确、无歧义,能够发现需求阶段的隐藏错误。 通过数学证明保证系统的安全性和可靠性。 缺点: 学习和应用成本高,需要较强的数学背景。 ...
Java 文件复制:字符缓冲流与字节缓冲流详解
1. 引言在 Java 中,文件复制是最常见的 IO 操作之一。针对不同类型的文件,Java 提供了不同的流来处理: 文本文件(.txt、.java、.html 等):推荐使用 字符流,能正确处理字符编码。 任意文件(图片、视频、音频等):必须使用 字节流,以保证二进制数据的完整性。 为了提高效率,通常会使用 缓冲流 对基础流进行包装,减少与磁盘的交互次数。 2. 文本文件复制 —— 字符缓冲流2.1 为什么用字符流?文本文件由字符组成,涉及编码(如 UTF‑8、GBK)。若使用字节流读取,可能会将一个多字节字符截断,产生乱码。字符流内部已封装了编码和解码过程,操作起来更安全、方便。 2.2 代码实现123456789101112131415161718192021222324import java.io.*;public class TextFileCopy { public static void main(String[] args) { String source = "source.txt"; // 源...
Java 枚举的应用场景:从常量到设计模式
1. 替代传统常量类在枚举出现前,通常用 public static final 定义常量: public class Status { public static final int PENDING = 0; public static final int APPROVED = 1; public static final int REJECTED = 2;}这种方式存在类型不安全、缺少命名空间、打印不直观等问题。 使用枚举后:public enum Status { PENDING, APPROVED, REJECTED}类型安全:方法签名 setStatus(Status s) 可杜绝非法值传入。 可读性强:Status.PENDING.toString() 直接输出 “PENDING”。 内置方法:values() 遍历所有常量,ordinal() 返回序号,name() 返回名称。 支持 switch:可直接配合 switch-case 使用。 进阶用法可为常量关联字段:public enum ErrorCode ...
素数筛法详解:从试除法到线性筛
1. 问题定义素数(质数)是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的数。常见的需求有两类: 判定单个整数 n 是否为素数。 筛选出区间 [1, n] 内的所有素数。 本文聚焦第二类问题的优化方法。 2. 单个判定:试除法试除法是最基础的素数判定方法。对于整数 n,只需检查 2 到 √n 之间是否存在 n 的因子。 1234567boolean isPrime(int n) { if (n < 2) return false; for (int i = 2; i * i <= n; i++) { if (n % i == 0) return false; } return true;} 时间复杂度:O(√n) 若用此方法逐个判定 [1, n] 内的每个数,总复杂度为 O(n√n),当 n 较大时不可接受。 3. 埃拉托斯特尼筛法(Sieve of Eratosthenes)3.1 原理埃筛的核心思想是:从 2 开始,从小到大遍历每个数,若该数未被标记为合数,则它是素...
反射机制详解:原理、核心 API 与框架应用
1. 反射的本质反射(Reflection)是 Java 语言提供的一种动态机制,允许程序在运行时检查或修改类、接口、字段、方法等的结构信息,而无需在编译时知道这些类的具体实现。 几乎所有主流 Java 框架(Spring、MyBatis、Hibernate 等)都依赖反射来实现依赖注入、对象映射等功能。理解反射是阅读框架源码和设计通用组件的基础。 2. 获取 Class 对象反射的入口是 java.lang.Class 对象,每个被 JVM 加载的类都有唯一对应的 Class 实例。获取该实例的三种方式如下: 123456789// 1. 通过对象实例获取Student stu = new Student();Class<?> clazz1 = stu.getClass();// 2. 通过类字面常量获取Class<?> clazz2 = Student.class;// 3. 通过全限定类名动态加载(最常用于框架)Class<?> clazz3 = Class.forName("com.example.Student")...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment
