Java 我们可以在BCEL中的堆栈操作数上推送自定义类型对象吗?

Java 我们可以在BCEL中的堆栈操作数上推送自定义类型对象吗?,java,bytecode,bcel,Java,Bytecode,Bcel,在BCEL中,我们可以将基元类型推送到操作数堆栈上。但现在我想知道是否可以在BCEL中在堆栈上推送自定义类型对象 我给出了一些代码,以便它能够解释问题的上下文 class Automobile { public void getEngine(int carNo,EngineClass engineClassObj){ System.out.println("EngineNo="+engineClassObj.sisNo); } } Now when i load "Automobi

在BCEL中,我们可以将基元类型推送到操作数堆栈上。但现在我想知道是否可以在BCEL中在堆栈上推送自定义类型对象

我给出了一些代码,以便它能够解释问题的上下文

    class Automobile {

public void getEngine(int carNo,EngineClass engineClassObj){

System.out.println("EngineNo="+engineClassObj.sisNo);
}
}

Now when i load "Automobile" class in memory.

ilist = new InstructionList();
ilist.append(InstructionConstants.ALOAD_0);
ilist.append(new PUSH(pgen,345));

////Hear Now i have to also push the Object on Stack

ilist.append(ifact.createInvoke(_invoking_ClassName,_invoking_MethodName, Type.INT,*
new Type[] { Type.INT,Type.OBJECT }, Constants.INVOKEVIRTUAL));

ilist.append(InstructionConstants.IRETURN);
1-如果我使用createNew()方法并生成新对象,那么我将如何 填充其字段值? 2-或者如果我首先使用push将Engine type Obj的所有字段值推送到堆栈上 然后我可以了解如何在内存中构造对象,然后将其推送到堆栈上。 这些是我能想到的一些解决办法

但我不知道正确的解决办法 所以仍然需要帮助…

创建一个新对象并在堆栈上放置对它的引用。它需要一个指向常量池中的类引用的索引,该索引可以通过获取。例如:

il = new InstructionList();
il.append(new NEW(cp.addClass("java.lang.StringBuffer")));
这是BCEL示例的一部分


还有其他方法可以在堆栈上获取对象引用。例如,在堆栈上推送空引用、从局部变量加载引用或从类中获取静态字段。

自定义对象是什么意思?对某个对象的引用?@aioobe,我已经添加了代码片段希望你现在就知道当我使用ALoad\u 0时,它会出现以下异常::无法从空堆栈中弹出操作数。这将指出我们需要在堆栈上推送一些东西。如果加载它,你会怎么说呢@zaree:你们想在堆栈上放置什么对象的引用?如果是空引用,请使用ACONST_null。否则它应该来自某个地方,例如,来自一个局部变量,在这种情况下,使用带有局部变量索引的ALOAD。或者你可以使用NEW创建一个对象。你可以在任何example@zaree:当然可以。我添加了一个使用NEW的示例。