📄🦌🙌🐟🏖️
日志记录
Where there is a where there is a way
随机文章
按住 Shift 横向滚动
热门文章
按住 Shift 横向滚动
正则表达式

正则表达式

正则表达式是一种强大的字符串匹配工具,用于校验数据格式和提取文本内容。它通过字符类(如[abc])、预定义字符(如\d匹配数字)、数量词(如+、*)和分组(())定义规则。在Java中,使用Pattern和Matcher类实现匹配与爬取,支持贪婪(默认)和非贪婪(在量词后加?)模式。字符串方法如matches()、replaceAll()、split()可直接应用正则。捕获分组可通过\组号引用(外部用$组号),非捕获分组(?:、?=、?!)仅用于逻辑判断而不占用组号。这些特性使正则表达式成为文本处理的利器。

JDBC

JDBC

JDBC(Java DataBase Connectivity)是Java操作关系型数据库的统一API接口,由Sun公司定义,各数据库厂商提供实现(驱动jar包)。使用JDBC可屏蔽不同数据库差异,实现底层数据库的灵活替换。所有ORM框架(如MyBatis、Hibernate)本质上都是JDBC的高级封装。 快速入门步骤:注册驱动(`Class.forName`)、获取连接(`DriverManager.getConnection`)、定义SQL、获取`Statement`对象、执行SQL、处理`ResultSet`、释放资源。 核心API:`DriverManager`管理驱动和连接;`Connection`获取执行SQL对象并管理事务(`setAutoCommit`、`commit`、`rollback`);`Statement`执行SQL(`executeQuery`/`executeUpdate`/`execute`);`ResultSet`封装查询结果,通过`next()`遍历并用`getXxx()`获取数据;`PreparedStatement`预编译SQL避免注入,使用`?`占位符并调用`setXxx`赋值,支持预编译优化。 数据库连接池(如Druid)复用连接,提高效率和资源利用率。Druid使用步骤:导入jar包、配置`druid.properties`、加载配置、通过`DruidDataSourceFactory`创建`DataSource`、调用`getConnection`获取连接。

注解

注解

注解是Java中用于为代码添加元数据的“便利贴”,可被编译器、工具或框架读取。其四大作用包括:编译时检查(如@Override)、文档生成、运行时框架处理(如Spring注入)、编译时代码生成(如Lombok)。元注解(@Target、@Retention等)用于定义注解的用法和生命周期。自定义注解可定义属性,通过反射解析注解内容实现验证等功能。注解本质上是接口,其解析需通过Class、Method等对象的反射API完成。

反射

反射

## 摘要 Java反射(Reflection)使程序在运行时能检视自身,动态获取类信息、构造对象、调用方法、访问字段,甚至绕过权限限制。其核心API包括:通过`Class.forName()`或`.class`获取Class对象;通过`getDeclaredConstructor/Field/Method`获取构造器、成员变量和方法,并利用`setAccessible(true)`进行暴力反射。反射主要应用于框架开发(如Spring IoC、AOP、ORM)、动态代理、插件系统等场景,实现编译时未知的运行时动态性。但反射性能损失显著,因安全检查、方法查找、参数装箱等环节,最差比直接调用慢60倍,缓存优化后仍慢10倍以上。因此建议:反射是框架开发者的瑞士军刀,普通开发者应谨慎使用。

java网络编程

java网络编程

本文介绍了Java网络编程基础,涵盖网络模型(OSI七层与TCP/IP四层)、IP核心类(InetAddress、InetSocketAddress等)、常用协议(UDP无连接不可靠、TCP面向连接可靠、HTTP/HTTPS基于TCP)。UDP通信使用DatagramSocket,支持单播、组播(MulticastSocket)和广播;TCP通信使用Socket/ServerSocket,通过三次握手建立连接,四次挥手断开,支持多线程实现多客户端群聊。同时简述了HTTP协议格式、状态码及HTTPS加密原理,并给出简易HTTP服务器示例。核心是掌握IP、端口、协议三要素及Java网络编程API。

java多线程基础

java多线程基础

本文全面介绍了Java多线程的核心概念与实现方法。首先阐述了进程与线程的区别,强调多线程用于同时执行多个任务,并区分了并发与并行。多线程的实现方式包括继承Thread类、实现Runnable接口、使用Callable+FutureTask以及Lambda表达式,各有优缺点。线程安全是重点,通过同步代码块、同步方法和Lock锁(如ReentrantLock、ReadWriteLock)解决共享数据竞争问题。还介绍了线程生命周期、通信模型(生产者-消费者)以及线程池的创建与管理,其中自定义线程池需配置核心线程数、任务队列和拒绝策略。最后对比了悲观锁、乐观锁(CAS原子类)和死锁的成因与预防。摘要涵盖了从基础到进阶的关键知识点,适用于快速理解多线程编程的核心思想。

IO流(高级流)

IO流(高级流)

Java IO体系中的高级流主要包括:**缓冲流**通过8KB内部缓冲区减少直接磁盘访问,提升读写效率,其中字节缓冲流显著提高性能,字符缓冲流特有`readLine()`和`newLine()`方法;**转换流**作为字节与字符的桥梁,可指定编码解决文本乱码问题,支持`InputStreamReader`和`OutputStreamWriter`;**数据流**能保持基本数据类型(如int、double)的二进制格式读写,常用于网络协议;**序列化流**实现对象与字节流的互转,需实现`Serializable`接口,注意固定`serialVersionUID`和`transient`关键字;**打印流**简化输出,支持自动换行、格式化(printf)且不抛IOException;**压缩流**包括GZIP(单文件高压缩率)和ZIP(多文件/目录),用于节省空间和传输时间。

IO流(基本流)

IO流(基本流)

本文介绍了Java IO流的基本概念与分类:IO流用于存储和读取数据,按方向分为输入流(读取)和输出流(写入);按操作文件类型分为字节流(可操作所有文件)和字符流(仅操作纯文本)。字节流核心类包括FileOutputStream(写入)和FileInputStream(读取),常用于文件拷贝,支持一次读写多个字节以提高效率。字符流底层基于字节流与字符集,适用于纯文本操作,主要类有FileReader和FileWriter,内部维护8192字节缓冲区,支持指定编码。文章还说明了不同JDK版本下的异常处理方式(try-with-resources),以及字符集(ASCII、GBK、UTF-8等)对编码解码的影响,强调编码统一以避免乱码。

File类

File类

Java 的 `File` 类位于 `java.io` 包,用于表示文件和目录的路径名,可指向存在或不存在的路径,但不能读写文件数据。构造方法支持通过路径字符串、父路径+子路径字符串、父路径对象+子路径字符串三种方式创建。常用成员方法包括:判断(isDirectory、isFile、exists)、获取信息(length、getAbsolutePath、getPath、getName、lastModified)、创建(createNewFile 创建文件、mkdir 创建单级文件夹、mkdirs 创建多级文件夹)、删除(delete 仅能删除文件或空文件夹,不走回收站)、遍历(listFiles 返回当前路径下所有内容,支持文件过滤器;list 返回文件名数组)。注意:length 获取文件夹大小需累加;listFiles 在路径不存在、是文件或权限不足时返回 null。递归可实现遍历查找指定文件或删除含内容的文件夹。

java异常详解

java异常详解

Java异常是程序运行中的问题,分为**Error**(不可恢复)和**Exception**(可处理)。Exception又分为**运行时异常**(非受检,如NullPointerException)和**受检异常**(编译时必须处理)。异常可用于定位bug或作为特殊返回值通知调用者。 处理方式主要有三种: 1. **JVM默认处理**:打印异常信息并终止程序。 2. **捕获异常**:用`try-catch-finally`阻止程序停止,`finally`块无论如何都会执行,常用来释放资源。 3. **抛出异常**:在方法内用`throw`手动抛出异常对象,方法声明用`throws`告知调用者可能出现的异常。 **自定义异常**:继承`RuntimeException`(运行时)或`Exception`(编译时),提供无参和带参构造,使报错信息更见名知意。异常处理时需注意catch顺序(父类在后)、try中异常后后续代码不执行等细节。

© 2026 日志记录