这是我的代码:
public class Test {
private static int NN;
public Test (int N) {
NN = N;
}
public static void main(String[] args) {
Test t = new Test (N);
int l = NN;
for (i = 0; i < l; i++) {
// do my loop
}
}
}
我想要做的是从构造函数中获取“N”并将其传递给我可以在main()中使用的变量但是:
a)如果我这样做,我会收到一个发现警告:
M D ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD ST: Write to static field...
b)如果我不使“NN”为静态,则不会编译。
c)如果我为我的私有变量(NN)写了一个getter / setter,我就打破了api。
答案 0 :(得分:2)
main()是程序的入口点。当JVM调用它时,没有类型为Test的对象,因此尚未调用构造函数,这就是为什么main()是静态的,以及为什么它想要访问的任何字段也必须是静态的。
您要解决的问题是什么?什么是N,它来自哪里?
如果它来自命令行,那么您将在args数组中找到它作为字符串。然后,您需要将其转换为整数(如果您不关心错误处理,则Integer.valueOf()是合适的),然后使用它。
答案 1 :(得分:1)
萤火虫警告Write to static field...
,因为您在构造函数中分配static
变量NN
,以修复它使用:
public Test (int N) {
Test.NN = N;
}
如果您不想为setter/getter
变量写NN
;考虑使用reflection
在运行时