反射是Java在运行时动态获取和修改类的属性、方法(包括private)的机制。核心类为Class、Constructor、Method、Field。它可突破访问限制、实现自定义注解、动态加载第三方jar、按需加载类等。原理是ClassLoader加载.class文件生成Class对象,利用上述四类在内存中操作。优点是灵活自由,缺点是性能较差、破坏封装导致安全风险、版本兼容问题。适度、按需使用可降低影响,使用Android API时需注意兼容性。

利用 Java 的 `IntegerCache`(-128~127 的整数被缓存)并通过反射修改缓存中的对象,可以让同一个 `Integer a = 1` 同时等于 1、2、3。代码先取得 `Integer` 的内部类 `IntegerCache`,把 `cache[130]`、`cache[131]` 指向 `cache[129](值为 1)`,随后 `a == Integer.valueOf(1) && a == Integer.valueOf(2) && a == Integer.valueOf(3)` 为 true。由于 `Integer.valueOf` 对小整数返回缓存对象,而 `new Integer()` 每次都创建新实例,后者比较始终为 false。此技巧展示了 JDK 缓存机制及其对对象相等性的影响。

文章介绍了 Java 中两种常见的死循环写法——`for(;;)` 与 `while(true)`,并通过 JDK 源码实例说明它们的使用场景。作者分别编写测试类,使用 `javap -v` 查看编译后生成的字节码,发现两者在现代编译器下产生的字节码完全相同,性能上没有区别。之所以源码中常见 `for(;;)`,是源于早期 C 语言及早期 Java 编译器对 `for` 循环生成的字节码更简洁、占用更少内存,形成了编程习惯。随着编译器优化的提升,这两种写法在当前主流 JDK 中已无实质差异。

本文介绍了在 Docker 中实时查看容器日志的常用命令。使用 `docker logs -f --tail 10 <容器>` 可实时跟踪最新10行并自动刷新;`docker logs --tail 10 <容器>` 或 `docker logs <容器> | tail -n 10` 仅输出最新10行;`docker logs <容器> | head -n 10` 查看日志开头;通过管道与 `grep` 结合,如 `docker logs <容器> | grep 'ERROR'` 可搜索关键字,进一步配合 `tail -n 2` 仅显示最近两条错误日志。

本文介绍了在 Windows 环境下安装 Groovy 的完整步骤,包括下载 Groovy‑SDK(提供官网和网盘链接)、解压到指定目录、配置环境变量、验证安装是否成功,以及在 IntelliJ IDEA 中创建 Groovy 项目并编写示例代码,帮助读者快速上手 Groovy 脚本语言。

本文系统阐述了 Java 中关键字 **this** 与 **super** 的概念、作用及使用规范。 - **this** 代表当前对象实例,可用于访问本类属性、调用本类方法、在构造器首行调用其他构造方法以及区分形参与成员变量。 - **super** 代表直接父类对象,可调用父类的非私有成员、在子类覆盖后访问父类同名方法或属性,并在构造器首行显式调用父类构造函数。 文中通过 Father‑Son 示例演示了隐式 super() 导致的编译错误及两种解决方案(添加无参构造或显式 super 参数),并对 this 与 super 的查找范围、功能差异进行对比总结。