为什么java类的约束器不适用于android?

时间:2017-12-28 19:01:33

标签: java android constructor

在java中我们使用for循环并从类的类中创建新对象时类的方法运行5次,例如:  for(int x = 0; x< 5; x ++){c1 = new CountTest();}

在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次,instanceCount的值应为4。 但是在textview中没有看到4号。 textview show number:1

这意味着约束器未正确运行5次。 什么错了..?

2 个答案:

答案 0 :(得分:1)

构造函数执行5次,创建了5个CountTest个实例。

但是,由于instanceCount是一个实例变量,因此CountTest类的5个实例中的每一个都具有该变量的不同副本。所有这些都被初始化为0,然后增加到1.

如果您将其设为static变量,那么您将获得预期的输出。 CountTest类的所有实例都将更新相同的变量。

更改

private int instanceCount = 0;

private static int instanceCount = 0;

答案 1 :(得分:0)

instanceCount的值为1,因为它是实例变量,这意味着CountTest中创建的for loop类的每个实例都有自己的instanceCount副本{1}}。当instanceCount初始化为0,然后1中的constructor增加时,instanceCount的每个实例的CountTest将具有值{{} 1}}。

制作1 instanceCount,以便static

的所有实例之间共享instanceCount的一份副本
CountTest
  

约束器应运行4次

目前,自private static int instanceCount = 0; 执行5次以来,它将执行for loop次。如果您希望它执行5次,请将循环条件更改为4

x<4