![](/img/trans.png)
[英]Accessing JDBC connection variable from one class to another class in java
[英]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,因为这是第一类ag
中n
的初始值。 仅当执行ag
的main()
方法时, n
才更改为15,但是您当前不执行此操作。
您可以“手动”调用ag.main()
方法作为ah
的main()
方法的一部分,例如:
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.