Loading...
守株阁Java中的条件编译 Back to Home

Java中的条件编译

Created2022-01-12|Updated2026-01-24
|Word Count:7|Reading Time:1mins|Post Views:

Java中的条件编译

Author: magicliang
Link: https://magicliang.github.io/2022/01/12/Java%E4%B8%AD%E7%9A%84%E6%9D%A1%E4%BB%B6%E7%BC%96%E8%AF%91/
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Java
Related Articles
cover
2025-07-29
Java 浮点数精度问题深度解析——从 IEEE 754 到 BigDecimal
0.1 + 0.2 != 0.3——这可能是编程世界中最令人困惑的"Bug"之一。但它不是 Bug,而是 IEEE 754 浮点数标准的必然结果。本文将从二进制表示的底层原理出发,深入剖析浮点数精度丢失的根本原因,并给出 Java 中精确计算的完整解决方案。 Part 1: IEEE 754 标准详解 历史背景 在 IEEE 754 标准(1985 年首版,2008 年修订为 IEEE 754-2008)出现之前,不同的计算机厂商使用不同的浮点数格式,导致同一个程序在不同机器上运行结果不同。IEEE 754 统一了浮点数的表示和运算规则,成为几乎所有现代处理器和编程语言的基础。 浮点数的三个组成部分 IEEE 754 浮点数由三部分组成: 12345(-1)^S × 1.M × 2^(E - bias)S: 符号位(Sign) —— 0 正,1 负E: 指数位(Exponent) —— 偏移后的指数M: 尾数位(Mantissa) —— 小数部分(隐含前导 1) float 与 double 的内存布局 类型 总位数 符号位 指数位 尾数位...
cover
2025-07-29
Java 字符编码与 Unicode 完全指南——从 BMP 到增补平面,从代码单元到字形簇
“一个 char 就是一个字符”——这个直觉在 Java 中是错误的。一个 emoji 👨‍👩‍👧‍👦 在 Java 中占 11 个 char,但在用户眼中只是一个字符。本文将从 Unicode 的基础概念出发,深入剖析 Java 的字符编码机制,揭示 char、码点、代码单元、字形簇之间的层次关系。 Part 1: Unicode 基础——字符集的大一统 从 ASCII 到 Unicode 的演进 编码 年份 字符数 位宽 覆盖范围 ASCII 1963 128 7 位 英文字母、数字、控制字符 ISO 8859-1 1987 256 8 位 西欧语言 GB2312 1980 6,763 汉字 双字节 简体中文 GBK 1995 21,886 汉字 双字节 简繁中文 Shift_JIS 1982 ~7,000 变长 日文 Unicode 1.0 1991 7,161 16 位(最初设想) 多语言 Unicode 16.0 2024 154,998 21 位(实际) 全球所有文字 + emoji Unicode 之前的世界是编...
cover
2022-01-25
Spring 数据库的若干种小技巧
常用命令 12345678910111213141516171819202122232425262728# 登录服务器mysql -u username -pdev -h hostname databaseName# 如何重命名一个 dbmysqldump emp > emp.outmysql -e "CREATE DATABASE employees;"mysql employees < emp.outmysql -e "DROP DATABASE emp;"# mysqldump 的用法mysqldump -u username -h hostname -ppassword databaseName > /exportpath/dump.sql# 使用 brew 控制 mysqlbrew install mysqlbrew services restart mysql# 登录本机 root 用户mysql -uroot# 使用密码登录本机 root 用户mysql -uroot -p# 标准格式mysql -u US...
cover
2026-02-07
Maven 完全指南
本文整合了 Maven 构建生命周期、插件配置、依赖管理、全局配置 settings.xml、FatJar 打包、测试与覆盖率等全部知识点,是一份系统性的 Maven 参考指南。 maven-生命周期.xmind 构建生命周期 构建生命周期的基础知识 Maven 基于一个"构建生命周期"的中心概念,也就意味着构建和发布一个特定的工件(也就是工程)的过程已经被清晰地定义了。 有三种内置的生命周期:default,clean 和 site。default 生命周期处理项目部署,clean 生命周期处理项目清理,site 生命周期处理项目的站点(site)文档的创建。 graph TD subgraph Clean生命周期 A1[pre-clean] --> A2[clean] A2 --> A3[post-clean] end subgraph Default生命周期 B1[validate] --> B2[initialize] B2 -->...
cover
2026-02-07
Java 结构化并发
结构化并发(Structured Concurrency) 结构化并发是 Java 并发编程的重要演进方向,与虚拟线程紧密配合,旨在解决传统并发编程中的线程泄漏、错误处理困难等问题。 1. 历史背景 1.1 结构化并发的起源与核心类比 术语起源 “结构化并发”(Structured Concurrency)这个术语由 Martin Sústrik(ZeroMQ 作者)在 2016 年首次提出。随后,Nathaniel J. Smith 在 2018 年发表了著名的文章《Notes on structured concurrency, or: Go statement considered harmful》,系统性地阐述了结构化并发的理论基础。 timeline title 结构化并发发展历程 2016 : Martin Sústrik 首创术语 : 在 250bpm.com 发表系列文章 2018 : Nathaniel J. Smith 发表核心论文 : "Go statement considered ha...
cover
2022-05-10
一个隐藏了17年的 JDK Bug
摘要 本文介绍了发现JDK-8286463 : DiscardPolicy may block invokeAll forever的全过程。 问题起因 因为工作需要,笔者最近考虑利用 Java 标准文档里的标准 API做一个批量执行任务的框架: 这个 API 的语义是: 批量执行任务。 在任务执行完成(不管任务是被正常终止还是异常终止)后,批量返回一个持有任务状态的 Future 列表。 我们团队内部的代码里已经有了一个自定义线程池的工厂方法,大义是: 1234567891011121314151617181920212223242526272829303132333435363738394041/** * 一个有缺陷的线程池构造器 * * @param corePoolSize the number of threads to keep in the pool, even * if they are idle, unless {@code allowCoreThreadTimeOut} is ...
avatar
magicliang
关于技术以及人生
Articles
352
Tags
260
Categories
10
Github
Announcement
人生只是,守株待兔
Recent Posts
macOS CLI 工具 HTTPS 抓包指南(以 OpenCode 为例)
macOS CLI 工具 HTTPS 抓包指南(以 OpenCode 为例)2026-03-17
JSONC - 带注释的 JSON
JSONC - 带注释的 JSON2026-03-16
QMD:本地智能文档搜索引擎完全指南
QMD:本地智能文档搜索引擎完全指南2026-03-16
AI 项目配置文件全景图:md 文件的作用与边界
AI 项目配置文件全景图:md 文件的作用与边界2026-03-16
Agentic Coding:从工具到团队的范式跃迁
Agentic Coding:从工具到团队的范式跃迁2026-03-12
© 2017 - 2026 By magicliangFramework Hexo 8.1.1|Theme Butterfly 5.5.4