Inheritance Java:像类继承对象一样,方法继承JRE超类吗?

Inheritance Java:像类继承对象一样,方法继承JRE超类吗?,inheritance,object,methods,java,Inheritance,Object,Methods,Java,据我所知,一切都是Java中的对象 我正在浏览JavaJDK,并尝试创建一个自定义JDK,它允许我执行更多的调试操作。例如,我可以通过更改object.java类来操作每个对象 我的问题是:方法是否也从JRE继承了一个类,这样我就可以修改这个父类,例如,让一个方法保存最近传递的参数 谢谢。不,不是Java中的所有东西都是对象。方法不是对象,基元值不是对象,引用不是对象。只有对象是Java(和数组)中的对象 有些对象表示类()、方法()、构造函数()和字段()。但“代表”某事物与“存在”某事物并不

据我所知,一切都是Java中的对象

我正在浏览JavaJDK,并尝试创建一个自定义JDK,它允许我执行更多的调试操作。例如,我可以通过更改object.java类来操作每个对象

我的问题是:方法是否也从JRE继承了一个类,这样我就可以修改这个父类,例如,让一个方法保存最近传递的参数


谢谢。

不,不是Java中的所有东西都是对象。方法不是对象,基元值不是对象,引用不是对象。只有对象是Java(和数组)中的对象

有些对象表示类()、方法()、构造函数()和字段()。但“代表”某事物与“存在”某事物并不相同

所以不:方法不是对象,它们不从任何基类(或“基类方法”)继承


如果您希望在较低级别与JVM交互,那么可能是适合您的正确API。

如果您只想增强调试,可以从查看提供的功能开始。在此之前,看看是否有一个更高级别(因此更易于使用)的API构建在JVMTI之上,适合您的需要

尽管您所说的听起来不太可能,但通过使用字节码操纵库(如BCEL)也可以实现类似的效果


对于您的特定示例,如果您想要记录方法调用及其参数,只需使用JDI设置断点,然后查询调用堆栈就可以了。

字段、方法、参数和局部变量在Java中不是对象。它们具有可以使用反射来表示它们的对象,但它们不是对象


如果要更改方法的行为以跟踪传递给它的参数,可以使用代码注入。e、 AspectJ可以做到这一点,并提供了如何做到这一点的示例。

我建议您首先查看一个现有的研究虚拟机,如Jikes RVM。虚拟机实现过程中出现的许多问题都在这里进行了讨论和记录。@biziclop,这是否允许我让每个方法将其最近传递的参数保存到类的静态变量中?@Tom否,但如果您真的想尝试修改虚拟机,这是一个很好的起点。与修改Sun VM并想知道为什么什么都不起作用相比,这稍微不那么令人沮丧了一些。:)@Tom:这相当复杂,因为您需要对JVM进行相当复杂的更改。@Joachim,好吧,但它是否需要VM在调试模式下运行?我可能应该提到,我只控制运行时的源代码(JRE),而不是应用程序本身的源代码。AspectJ仍然是一个选项吗?AspectJ可以在JRE加载字节码时更改字节码。您甚至不需要直接访问jar/类。我不认为它可以在加载后更改字节码,尽管理论上是可能的“用JDI设置断点,然后查询调用堆栈就可以做到这一点”,这听起来确实相当复杂。这在不修改应用程序源代码的情况下是可能的吗?@Tom:这就是想法:JDI/jvmti可以与正在运行的JVM交互,而无需修改在该JVM上运行的代码。请阅读提供给您的链接。@Joachim Sauer,它需要应用程序在调试模式下运行吗?@Tom,它需要启动指令插入(在命令行中指定为代理),我称之为“调试器设置”,尽管它与-Xrunjdwp不同。基本上这是什么剖析器do@bestsss好吧我担心我不能用任何特殊参数启动VM,原因有两个。我想我必须侵入JRE文件,看看我能做些什么来将参数传递给函数。