当前位置: 首页 > news >正文

java微操

在 Java 中,我们可以通过一些巧妙的技巧实现看似"骚"的操作(高效、简洁或反直觉的代码)。以下是几个实用示例,包含注释说明:


1. ​不用临时变量交换两个数

int a = 5, b = 10;
a = a ^ b; // 异或操作存储差异
b = a ^ b; // 还原原始a的值并赋给b
a = a ^ b; // 还原原始b的值并赋给a
System.out.println("a=" + a + ", b=" + b); // 输出: a=10, b=5

2. ​Stream 一行实现 FizzBuzz

IntStream.rangeClosed(1, 20).mapToObj(n -> n % 15 == 0 ? "FizzBuzz" : n % 3 == 0 ? "Fizz" : n % 5 == 0 ? "Buzz" : n).forEach(System.out::println);

3. ​通过反射修改 String 内部值

String s = "Hello";
Field valueField = String.class.getDeclaredField("value");
valueField.setAccessible(true); // 突破私有访问限制
char[] value = (char[]) valueField.get(s);
value[0] = 'J';
System.out.println(s); // 输出: Jello(警告:破坏不可变性)

4. ​finally 篡改返回值

public static int trickyReturn() {try {return 1; // 先将1压入栈} finally {return 2; // finally会覆盖返回值}
}
System.out.println(trickyReturn()); // 输出: 2

5. ​用空数组实现高效判空

List<String> list = getNullableList();
if (list.toArray().length == 0) { // 避免创建新对象System.out.println("List is empty!");
}

6. ​动态编译并执行字符串代码

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, "-sourcepath", "", "Temp.java");
URLClassLoader loader = URLClassLoader.newInstance(new URL[]{new File("").toURI().toURL()});
Class<?> clazz = loader.loadClass("Temp");
clazz.getMethod("run").invoke(clazz.newInstance());

注意​:需要提前将代码字符串写入 Temp.java 文件。


7. ​利用枚举实现单例模式

public enum Singleton {INSTANCE;public void doSomething() {System.out.println("Singleton action");}
}// 使用
Singleton.INSTANCE.doSomething();

8. ​通过异常控制递归深度

class RecursionThrower {static void deepRecursion(int depth) {try {deepRecursion(depth + 1);} catch (StackOverflowError e) {System.out.println("Max depth: " + depth); // 输出栈深度}}
}
RecursionThrower.deepRecursion(0);

使用建议:

  1. 谨慎使用反射​:破坏封装性,影响 JVM 优化和安全。
  2. 避免修改 finally 返回值​:降低代码可读性。
  3. 优先保证可维护性​:多数"骚操作"仅适用于特定场景。

合理运用这些技巧可以提升代码灵活性,但在生产环境中应优先考虑代码健壮性。

http://www.dtcms.com/a/298775.html

相关文章:

  • NLP验证自动化脚本优化
  • 硬核接线图+配置步骤:远程IO模块接入PLC全流程详解
  • 前端开发 Vue 状态优化
  • 多场景通用车辆计数算法助力暑期交通管理
  • Java从入门到精通!第十四天,重点!(反射)
  • 20250725-day22
  • Ivanti Endpoint Manager Mobile 远程命令执行漏洞复现(CVE-2025-4427)
  • 壁纸管理 API 文档
  • 测试实时性内核参数配置
  • 如何阅读字节码文件
  • Arrays 工具类详解
  • 在线事务型的业务、实时分析类业务、离线处理类型的业务
  • C语言————原码 补码 反码 (超绝详细解释)
  • 【循环语句,求100内能被6整除的和】
  • 群晖 File Station:集中浏览与管理 NAS 文件的工具
  • 60个Java与Spring核心知识点详解
  • [Java恶补day46] 整理模板·考点九【二叉树最近公共祖先】
  • 跨境电商流量密码:自养号测评采购技术,低成本撬动高转化
  • agent含义、起源、定义、分类、应用场景以及未来趋势
  • 机器学习入门
  • 从 “能打” 到 “顶尖”:DeepSeek-V3 后训练拆解,微调 + 强化学习如何让大模型脱胎换骨?
  • html+js列表分页功能封装
  • Kubernetes服务发布进阶
  • GPT - 5被曝将在8月初发布!并同步推出mini、nano版
  • 如何评估一个RWA项目的可信度?关键指标解析
  • dart使用
  • 在DolphinScheduler执行Python问题小记
  • 关于linux运维 出现高频的模块认知
  • 基于多种主题分析、关键词提取算法的设计与实现【TF-IDF算法、LDA、NMF分解、BERT主题模型】
  • Nginx 限流