繁体   English   中英

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

[英]Accessing Static variable from one class to another but getting incorrect value

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

我想在另一类中访问一个类的静态int变量 ,但是当我在另一类中访问此变量时,它总是给我“零”

这是头等舱

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

}

在这种情况下,我试图从头等舱访问静态变量n,但得到0作为输出,但我想要15。

您将获得0,因为这是第一类agn的初始值。 仅当执行agmain()方法时, n才更改为15,但是您当前不执行此操作。

您可以“手动”调用ag.main()方法作为ahmain()方法的一部分,例如:

ag.main(null); // <- new code
int k =ag.as();
System.out.println(k);

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

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

如果您确实希望将其设置为15,则将其初始化为15。

package kk;

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

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

要么

在调用as()之前先调用ag的main as()

package kk;

public class ah extends ag {

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

您的计算:

n=3; n=n*5;

是在ag类的main()方法中求值的,因此它对具有第二个main()方法的class ah没有影响-看起来您必须编程,而不仅仅是编程。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM