在java中,当我们使用for循环并从类的构造函数方法创建新对象时,运行5次,例如:for(int x = 0; x <5; x ++){c1 = new Count Test();}
在android中它无法正常工作!这是代码:
package com.hamid.counttestapp;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView=(TextView)findViewById(R.id.textview);
textView.setText(Integer.toString(Counter()));
}
public int Counter()
{
CountTest c1 = new CountTest();
for (int x=0; x<5; x++) {
c1 = new CountTest();
}
return c1.getInstanceCount();
}
class CountTest
{
private int instanceCount = 0;
public CountTest()
{
instanceCount++;
}
public int getInstanceCount()
{
return instanceCount;
}
}
}
构造函数应该运行4次,实例Count的值应该是4.但是在textview中看不到数字4。 textview显示编号:1
它意味着构造函数不能正确运行5次。怎么了..?
构造函数执行5次,并创建5个CountTest
实例。
但是,由于instanceCount
是一个实例变量,因此CountTest
类的5个实例中的每一个都具有该变量的不同副本。所有这些都初始化为0,然后增加到1。
如果你把它变成static
变量,你就会得到你期望的输出。 CountTest
类的所有实例都将更新相同的变量。
更改
private int instanceCount = 0;
至
private static int instanceCount = 0;
instanceCount
的值是1
,因为它是实例变量,这意味着在CountTest
中创建的for loop
类的每个实例都有自己的instanceCount
副本。当instanceCount
用0
初始化然后在1
中增加constructor
时,每个instanceCount
实例的CountTest
将具有1
的值。
制作instanceCount
static
,以便在instanceCount
的所有实例之间共享CountTest
的一个副本
private static int instanceCount = 0;
承包商应该运行4次
目前,它将执行5
次,因为你的for loop
执行5
次。如果您希望它执行4
次,请将循环条件更改为x<4
for (int x=0; x<4; x++) {
c1 = new CountTest();
}