簡體   English   中英

java-從另一個類訪問增量的靜態變量

[英]java - access incremented static variable from another 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);    
    }
  };

B級

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

我需要一個可以從每個類訪問並更新其值的全局變量。 等待您的幫助(我正在將其與Android服務配合使用)

這是一個經過測試的代碼。

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

    }
}

您需要調用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

編譯后,執行/運行

Java B

A類{static int id = 0;

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

公共類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);
}

}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM