假设在重置卡之前调用了applet构造函数和processToolkit方法。 假设在重置卡后只调用applet构造函数,而不是processToolkit方法。
我有以下三个关于重置后Object头的状态的问题。
以下代码:
public class TestApplet extends Applet
{
private byte[] A;
private byte[] B;
protected TestApplet() {
A = JCSystem.makeTransientByteArray(100, JCSystem.CLEAR_ON_RESET);
}
public static void install(byte[] bArray, short bOffset, byte bLength) {
TestApplet appToRegister = new TestApplet();
appToRegister.register();
}
public void processToolkit(short event) throws ToolkitException {
byte[] C;
C = JCSystem.makeTransientByteArray(100, JCSystem.CLEAR_ON_RESET);
B = JCSystem.makeTransientByteArray(100, JCSystem.CLEAR_ON_RESET);
}
}
答案 0 :(得分:3)
根据合理且负责任的JavaCard编程风格,你不应该有C并且应该在构造函数中将A放在A旁边,并且在从install()
安装applet期间只调用一次构造函数。其余部分在JavaCard运行时环境规范中进行了描述。
答案 1 :(得分:2)
每个实例只能调用一次applet构造函数。因此,如果我们讨论的是另一个实例,那么只有A将被声明为和实例化。
B只会被声明,但请注意默认情况下在Java中初始化字段,特别是null
用于对象引用(对 arrays 的引用被视为对象的引用)爪哇)。
processToolkit
的本地,因此它不会存在。
请注意,操作中似乎缺少对Applet.register
的调用,因此实例化后实例可能无法使用。
C的早期实例(对象标头)声明的持久性内存当然可能需要进行垃圾收集。 C是Java Card中已知的坏模式;你不会声称持久性内存只会在Java Card中丢弃引用。