使用 Java Reflection 和 Java Debug Interface 有什么区别?我什么时候可以使用一个,什么时候可以使用另一个?
来自 JDI 文档
JavaTM 调试接口 (JDI) 是一个高级 Java API,为需要访问(通常是远程)虚拟机运行状态的调试器和类似系统提供有用的信息。 JDI 提供对正在运行的虚拟机的状态、类、数组、接口和基元类型以及这些类型的实例的自检访问。
JDI 还提供对虚拟机执行的显式控制。能够挂起和恢复线程,以及设置断点、观察点等。异常通知、类加载、线程创建...能够检查挂起线程的状态、局部变量、堆栈回溯...
来自反射文档
反射通常由需要能够检查或修改在 Java 虚拟机中运行的应用程序的运行时行为的程序使用。这是一个相对先进的功能,只能由对语言基础知识有很强掌握的开发人员使用。考虑到这一点,反射是一种强大的技术,可以使应用程序执行否则不可能的操作。
我看到有点重叠,但对我来说,如果您打算创建自己的调试器,或者如果您有一些无法使用任何现有调试器解决的疯狂问题,则可以使用 JDI。 您可以使用反射作为运行时对象检查/操作的一种方式,以满足一些非正统的应用程序要求,例如创建自己的ClassLoader
或Annotation
。