我在类中调用了一个方法,如下所示:
String key1 = "test1";
String key2 = "test2";
long[] datalr = new long[] {};
TestClass myTC1 = new TestClass();
datalr = myTC1.callerSub(key1,key2);
TestClass myTC2 = new TestClass();
datalr = myTC2.callerSub(key1,key2);
测试类如下:
public class TestClass {
private final Long[] P = new Long[18];
Public TestClass {
}
public long[] callerSub(string key1, String key2){
long[] datalr = new long[] {0,0};
integer i;
system.debug(LoggingLevel.INFO,P[0]);
datalr[0] = 2;
datalr[1] = 3;
for ( i = 0; i < 18; ++i ){
P[i] = i+1
}
return datalr;
}
}
我两次调用TestClass.callerSub, 我第一次调用debug语句:
system.debug(LoggingLevel.INFO,P[0]);
它应该返回null,
我第二次打电话给它,P [i]现在有一个值,
如何在再次调用之前关闭或销毁TestClass类?
由于
答案 0 :(得分:8)
你做不到。这是静态状态不好的部分原因:P
不应该是静态的;它应该与TestClass
的实例相关联。
答案 1 :(得分:2)
删除类的实例最接近的是删除对类的所有引用并调用system.gc(),其中建议 jvm以运行垃圾收集器。无法保证jvm在您调用它时决定运行gc。
请参阅Louis Wasserman对您问题的实际解决方案的回答。
答案 2 :(得分:1)
我猜你的方法是静态的?
您可以将P变为变量,而不是静态字段,或者使您的方法成为实例方法,并将您的字段P作为实例字段(通过删除static关键字)。然后,您可以为每个调用创建一个新实例:new TestClass().callerSub(key1, key2)
答案 3 :(得分:0)
因为P是静态字段,所以它是在JVM启动时创建的,仅在JVM关闭时销毁。另外,因为你使P变为常量(使用final),所以不能设置P = null以便向垃圾收集器建议它应该被删除。因此,该数组将位于内存中的相同位置,并且只要程序正在运行,该静态变量将始终指向该数组。