从一个类访问静态变量到另一个类但获取的值不正确

时间:2017-06-06 13:20:36

标签: java

这是我关于stackoverflow的第一个问题,

我想访问另一个类中某个类的 static int variable 但是当我在另一个类中访问此变量时,它总是给我“0”

这是头等

package kk;

public class ag {
    public static int n=0;

    public static int as()
    {
        return n;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        n=3;
        n=n*5;
        System.out.println(n);
    }


}

此处输出为15,即此处n = 15.

第二课:

package kk;

public class ah extends ag {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //ag aa =new ag();
int k =ag.as();
System.out.println(k);
    }

}

在这个尝试从First类访问静态变量n但输出为0但我想要15。

4 个答案:

答案 0 :(得分:5)

您获得0,因为这是第一个班级nag的初始值。执行n的{​​{1}}方法时,ag仅更改为15,但您目前尚未执行此操作。

您可以在main()的{​​{1}}方法中手动调用ag.main()方法,例如: -

main()

这会将ah设置为15,但这不是最好的方法。

答案 1 :(得分:0)

Java只保留为变量维护的值以便执行。当第一个程序完成执行时,该对象不再存在。因此,对于第二类执行,该值将不存在&根据定义初始化为0。

如果你真的希望它是15,那么将它初始化为15。

package kk;

public class ag {
    public static int n=3*5;

    public static int as()
    {
        return n;
    }
}

在调用ag

之前调用as()的main()
package kk;

public class ah extends ag {

    public static void main(String[] args) {
        ag.main(args);
        int k =ag.as();
        System.out.println(k);
    }
}

答案 2 :(得分:0)

您的计算:

n=3; n=n*5;

正在使用类{ag}的main()方法进行评估,所以它对于你有第二个main()方法的类啊没什么影响 - 看起来你需要编程,而不只是一个。

答案 3 :(得分:-1)

@anju,还有一件事要考虑......

创建静态变量时,编译器有时会替换该值以节省时间。特别是当你使用关键字final。这意味着在编译时,它将替换辅助(或使用)类中的当前值。如果更改该值,则需要重新编译所有用法或编译所有内容,否则它们将具有旧值。