为什么java类的构造函数不能在android上运行?

问题描述 投票:0回答:2

在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次。怎么了..?

java android constructor
2个回答
1
投票

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

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

如果你把它变成static变量,你就会得到你期望的输出。 CountTest类的所有实例都将更新相同的变量。

更改

private int instanceCount = 0;

private static int instanceCount = 0;

0
投票

instanceCount的值是1,因为它是实例变量,这意味着在CountTest中创建的for loop类的每个实例都有自己的instanceCount副本。当instanceCount0初始化然后在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();
}
© www.soinside.com 2019 - 2024. All rights reserved.