java-从另一个类访问递增的静态变量
我有一个静态变量,并在类中更新它的值。但是当我从另一个类访问这个变量时,它显示了未更新的值 甲级java-从另一个类访问递增的静态变量,java,android,static,static-members,Java,Android,Static,Static Members,我有一个静态变量,并在类中更新它的值。但是当我从另一个类访问这个变量时,它显示了未更新的值 甲级 public static int postID = 1; public static String Creator() { String message = "POST id="+postID; return message; } void updatePostID() { postID++; //this function is being
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++ 这是一个a类示例:
class A {
static int id = 0;
public void work(){
id++;
}
}
将类A保存在名为A.java的文件中,将类B保存在名为B.java的文件中
然后编译B。因为B创建了类A的实例,所以A将被编译,您不需要单独编译A-
javacb.java
编译后,执行/运行-
爪哇湾
Sajal Dutta的回答很好地解释了这一点,但如果您希望保持所有内容都是静态的,即不创建任何A类对象,您可以稍微修改代码,如下所示:
class A {
static int id = 0;
public static void work(){
id++;
}
}
然后:
这将产生:
0
一,
根据更新的问题进行编辑
在哪里指定静态int的更新?从您提供的代码中,您所要做的就是反复打印相同的int,因为包含增量进程的方法从未被调用
编辑2:
试试这个:
更改:
handler.post(show);
致:
甲级
{
静态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);
}
}这甚至不是有效的java语法什么是函数工作?这甚至不是有效的输入?!这只是一个例子..我的意思是我正在更新函数中的值。写出你正在使用的确切代码-毕竟,这是一个相当短的代码量。顺便说一句,我假设你正在调用work方法?@dracula:是的。你确定吗e你已经完全复制了那段代码?将volatile添加到public static int postID=1;我认为你需要检查你的代码。这并不是你想要做的-为什么你要创建两个类A的对象,然后静态引用它,静态块很糟糕!把它放在一个方法中。只是一个反例,它会增加每个类的值告诉我你创建了一个新实例,但你没有解释。此外,在不使用对象并且静态访问int时,通过创建类的新对象来增加int是非常违反直觉的。正如我在评论中所写的,我使用每10秒运行一次的处理程序调用updatePostID。ha没有任何问题你们理解我的问题。若我访问类A中的postID,它会给我递增的值,若从类B调用它,它会给1,但通常是5,只是一个例子
handler.postDelayed(show, 10000);
//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);
}