Template
一、模板设计模式的核心思想 模板设计模式(Template Method Pattern)的核心是 定义一个算法的骨架,将某些步骤延迟到子类中实现,使得子类可以在不改变算法整体结构的情况下,重新定义某些步骤的具体逻辑。 核心要点: 固定流程:父类定义算法的主要步骤(如“烧水→冲泡→倒入杯子→加调料”)。 可变细节:子类实现具体的步骤(如“如何冲泡茶叶”或“加什么调料”)。 控制反转:父类控制流程,子类填充细节。 二、Java 实现模板模式的步骤1. 定义抽象类(模板类) 模板方法:用 final 修饰,定义算法的流程(防止子类覆盖流程)。 抽象方法:用 abstract 修饰,表示必须由子类实现的方法。 具体方法:父类提供默认实现的方法(如公共步骤)。 钩子方法(可选):提供默认逻辑的方法,子类可选择性覆盖(用于控制流程分支)。 1234567891011121314151617181920212223242526272829303132public abstract class AbstractClass { // 模板方法(final...
单列设计模式
单例设计模式 单例设计模式(Singleton Design Pattern)是一种创建型设计模式,其核心目标是确保一个类只有一个实例,并提供一个全局访问点来获取该实例。这种模式适用于需要全局唯一对象的场景,例如配置管理、日志记录、线程池、数据库连接池等 核心思想 私有化构造函数:防止外部通过 new 关键字直接创建实例。 静态实例:在类内部维护一个静态的实例。 全局访问点:通过静态方法(如 getInstance())提供对唯一实例的访问。 实现方式根据实例化的时机和线程安全的处理方式,单例模式有多种实现方法: 1. 饿汉式(Eager Initialization) 特点:类加载时就初始化实例。 优点:线程安全,实现简单。 缺点:可能造成资源浪费(实例未被使用时也占用内存) 123456789public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() {} ...
java中的常用API
java api 的使用一、BigDecimal 精确计算1.1 浮点数精度问题演示12// 浮点数运算存在精度丢失问题System.out.println(1.01 + 2.02); // 输出:3.0300000000000002 1.2 BigDecimal 基础用法123456789101112// 推荐使用字符串构造或 valueOf 方法初始化(避免double传参)BigDecimal one = new BigDecimal("1.01"); // 精确构造BigDecimal two = BigDecimal.valueOf(2.02); // 自动优化数值转换// 常规算术运算System.out.println(one.add(two)); // 加法:3.03System.out.println(one.subtract(two)); // 减法:-1.01System.out.println(one.multiply(two)); // 乘法:2.0402//...
Java正则表达式使用指南
一、Java 正则表达式核心类Java 通过 java.util.regex 包中的两个核心类处理正则表达式: Pattern:编译后的正则表达式对象(不可变,线程安全)。 Matcher:用于对输入字符串进行匹配和操作。 二、基本语法与元字符1. 常用元字符 元字符 说明 . 匹配任意字符(除换行符) \d 数字 [0-9] \D 非数字 [^0-9] \w 单词字符 [a-zA-Z0-9_] \W 非单词字符 \s 空白字符(空格、制表符等) \S 非空白字符 ^ 字符串开始 $ 字符串结束 2. 量词 量词 说明 * 0次或多次 + 1次或多次 ? 0次或1次 {n} 恰好n次 {n,} 至少n次 {n,m} 至少n次,至多m次 3. 分组与捕获 语法 说明 (exp) 捕获分组 (?:exp) 非捕获分组 (?<name>exp) 命名分组(Java 7+) 4....
如何看懂Java字节码关键字
1. 类与方法结构相关public class com/mozi/Main 作用:定义类的全限定名(含包路径)。 格式:public class <包名>/<类名>。 // access flags 0x21 作用:类的访问修饰符标志(十六进制)。 0x21 = 0x20 (ACC_SUPER) + 0x1 (ACC_PUBLIC)。 ACC_SUPER 是历史遗留标志,现代 Java 默认启用。 public <init>()V 作用:构造函数的方法定义。 <init> 是 JVM 内部约定的构造函数方法名。 ()V 表示无参且返回类型为 void。 public static main([Ljava/lang/String;)V 作用:main 方法的定义。 [Ljava/lang/String; 是 String[] 的类型描述符。 V 表示返回类型为 void。 2. 数据加载与存储ALOAD / ILOAD /...
如何看懂Java字节码
1. 字节码基础概念 什么是字节码:Java 源代码(.java)编译后生成的中间代码(.class),由 JVM 执行。 文件结构:遵循 JVM 规范,包含魔数、版本号、常量池、类信息、方法表等。 指令集:基于栈的虚拟机指令,例如 iload(加载整型)、invokevirtual(调用方法)等。 2. 工具准备查看字节码的常用工具 javap(JDK 自带): 1javap -c -v YourClass.class # 反编译并显示详细字节码 -c:输出指令码。 -v:显示附加信息(常量池、行号表等)。 IDE 插件: IntelliJ IDEA:安装 Bytecode Viewer 插件(右键类文件 → View → Show Bytecode)。 Eclipse:使用 Bytecode Outline 插件。 图形化工具: JClassLib:可视化分析 .class 文件。 JD-GUI:反编译为近似 Java 代码(但非原始字节码)。 3. 字节码文件结构关键组成部分 魔数(Magic Number):前 4 字节为...
mybatis 学习笔记
Mybatis环境: JDK 1.8 Mysql 5.7 maven 3.6.3 IDEA 2020.2 SSM框架:配置文件的。 最好的方式:看官网文档; 1、简介1.1、什么是Mybatis MyBatis 是一款优秀的**持久层框架** 它支持定制化 SQL、存储过程以及高级映射。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。 2013年11月迁移到Github。 如何获得Mybatis? maven仓库: 123456<!--...
MySQL 常用数据类型
一、数值类型1. 整数类型 数据类型 范围(有符号) 无符号范围 存储空间 示例场景 TINYINT -128 ~ 127 0 ~ 255 1字节 年龄、状态码(如0/1) SMALLINT -32768 ~ 32767 0 ~ 65535 2字节 小规模计数(如班级人数) MEDIUMINT -8388608 ~ 8388607 0 ~ 16777215 3字节 中等范围ID INT (INTEGER) -2147483648 ~ 2147483647 0 ~ 4294967295 4字节 用户ID、订单号 BIGINT -2^63 ~ 2^63-1 0 ~ 2^64-1 8字节 大型系统的主键、时间戳 注意: 若字段不需要负数,可加 UNSIGNED 关键字扩大范围(如 INT UNSIGNED)。 主键推荐用 INT 或 BIGINT(结合 AUTO_INCREMENT)。 2....
MySQL基本语法
1. 数据库操作创建数据库1CREATE DATABASE school; -- 创建一个名为 "school" 的数据库 删除数据库1DROP DATABASE school; -- 删除名为 "school" 的数据库 选择数据库1USE school; -- 切换到 "school" 数据库,后续操作都在这个库中进行 2. 表操作创建表123456CREATE TABLE students ( id INT PRIMARY KEY AUTO_INCREMENT, -- 学号(主键,自动增长) name VARCHAR(50) NOT NULL, -- 姓名(不能为空) age INT DEFAULT 18, -- 年龄(默认18岁) class VARCHAR(20) -- 班级); 解释: PRIMARY...
迭代器模式(Iterator)
📖 关于迭代器模式 迭代器模式是一种行为设计模式,它通过提供统一的遍历接口,解耦集合数据的存储结构与遍历逻辑,使客户端无需了解集合内部实现即可访问元素。
