java - 从另一个类访问递增的静态变量

时间:2013-08-19 20:13:40

标签: java android static static-members

我有一个静态变量并在课堂上更新它的值。但是当我从另一个类访问这个变量时,它会显示未更新的值。

CLASS A

  public static int postID = 1;

  public static String Creator()
  {
    String message = "POST id="+postID;
    return message;
  }

  void updatePostID()
  {
      postID++; //this function is being called each 10 seconds
  }

  @Override
  public void start() { 
    handler.post(show);
  }

  Handler handler = new Handler();
  private final Runnable show = new Runnable(){
    public void run(){
        ...
               updatePostID();
               handler.postDelayed(this, 10000);    
    }
  };

CLASS B

  String message = A.Creator(); //this always prints postID as 1 all time 

我需要一个全局变量,我可以从每个类访问并更新其值。等待你的帮助(我使用的是Android服务)

4 个答案:

答案 0 :(得分:2)

这是经过测试的代码。

public class A {

    public static int id = 0;

    public static int increment(){
        return A.id++;
    }

}

public class B {

    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            System.out.println(A.increment());
        }

    }
}

答案 1 :(得分:1)

您需要致电工作以执行id++;

class B {

    public static void main(String... args){

        A a = new A();
        a.work(); // You need to call it to apply add operation

        System.out.println(A.id); // Prints 1

    }

}

这是一个示例类A:

class A {

    static int id = 0;

    public void work(){

        id++;

    }
}

将A类保存在名为A.java的文件中,将B类保存在名为B.java的文件中。

然后编译B.由于B创建了A类的实例,因此将编译A并且您不需要单独编译A -

  

javac B.java

编译后,执行/运行 -

  

java B

答案 2 :(得分:1)

A班    {     static int id = 0;

//I am updating id in my function ,
{
  id++;
 }
}

public class StartingPoint {

public static void main(String... args){

    A a = new A();
    A b = new A();

    System.out.println(A.id);
    System.out.println(a.id);
}

}

答案 3 :(得分:0)

Sajal Dutta的答案完美地解释了它,但是如果你想保持它静态(即不创建任何A类对象,你可以稍微修改代码:

class A {
    static int id = 0;
    public static void work(){
        id++;
    }
}

然后:

class B {
    public static void main(String[] args){
        System.out.println(A.id);
        A.work();
        System.out.println(A.id);
    }
}

这会产生:

  

0
  1

修改(关于您更新的问题)

你在哪里指定静态int的更新?从你提供的代码中你要做的就是一遍又一遍地打印出相同的int,因为永远不会调用包含增量过程的方法。

编辑2:

试试这个:

变化:

handler.post(show);

为:

handler.postDelayed(show, 10000);