我今天正在接受Java测试,我得到了这个奇怪的问题,我觉得我是对的,但我的一些同学说的是另一个答案是正确的。有一个基本类,一个初始化实例的默认构造函数,以及一些方法。在主类中,有一些像这样的代码(不完全是因为我不记得了。假设书面的类名是“测试者”。
public class Testing {
public static void main(String[] args) {
int x = 0;
Tester t = new Tester ();
Tester a;
do {
new Tester ();
x++;
}while (x < 10);
}
}
问题是,一旦程序完全执行,实例化了多少个对象。
我的逻辑是,在循环外部实例化了一个对象。在循环内部,有另一个对象,但每次循环运行时,一个对象才被重新实例化。循环没有创建新对象。所以,我说只有两个对象在程序运行完成后才会被实例化,但是我的一些同学说它是11.技术上,什么是正确的?
答案 0 :(得分:0)
第new Tester()
行做了几件事
t
对于t执行这些步骤一次,并且对于每个循环执行再次执行这些步骤,总共是“实例化”测试程序的11倍。所以你的同学是对的。
当垃圾收集器运行时,每个Tester实例都将被删除。循环中的那些因为它们没有保存在变量中。例程退出后,可以删除存储在t中的那个。
这就是为什么在为任何类调用new xyz()
时应该谨慎,特别是在循环中。它通常很昂贵。特别是分配步骤。当然是is a tradeoff。
这是计算机完全按照您的要求执行操作的一个很好的示例。你期望它做的更接近:
public static void main(String[] args) {
int x = 0;
Tester t = new Tester();
Tester a = new Tester();
do
{
a.Reinitialise();
x++;
}
while (x < 10);
}
此处假设您在Reinitialise
内创建了一个方法Tester
。
答案 1 :(得分:0)
要测试它,可以在Test类中声明一个静态int计数器,并在构造函数中增加静态计数器的计数并打印该值。
执行后检查计数器的值。
顺便说一句..它会创建11个对象..试一试。
答案 2 :(得分:0)
11是正确答案......每当你调用new时,它都会创建并实例化对象......
Tester a;
不实例化对象......它只是标记分配给此变量的对象应该是测试人员类型
最好注意的是在构造函数中编写一个print语句,然后只计算打印数量......