-1

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

甲级

  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);    
    }
  };

B类

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

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

4

4 回答 4

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());
        }

    }
}
于 2013-08-19T20:26:55.553 回答
1

你需要调用 work 来执行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

编译后,执行/运行-

爪哇乙

于 2013-08-19T20:28:44.563 回答
1

A类{静态int id = 0;

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

公共类起点{

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

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

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

}

于 2013-08-19T20:35:31.120 回答
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);
于 2013-08-19T20:33:15.157 回答