-3

这是我的代码:

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)如果我这样做,我会收到一个 findbugs 警告:

M D ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD ST: Write to static field...

b)如果我使“NN”静态,它就不会编译。

c)如果我为我的私有变量(NN)编写一个 getter/setter,我会破坏 api。

4

2 回答 2

2

main() 是程序的入口点。JVM调用时还没有Test类型的对象,所以构造函数还没有被调用,这就是为什么main()是静态的,为什么它要访问的任何字段也必须是静态的。

您要解决的问题是什么?N是什么,它从哪里来?

如果它来自命令行,那么您会在 args 数组中找到它作为字符串。然后,您需要将其转换为整数(如果您不关心错误处理,则 Integer.valueOf() 是合适的),然后使用它。

于 2013-02-13T01:48:12.777 回答
1

萤火虫警告Write to static field...,因为您在构造函数中分配static变量NN,修复它使用:

public Test (int N) {
   Test.NN = N;
}

如果你不想setter/getter为你的NN变量写;考虑使用reflection在运行时访问它

于 2013-02-13T01:52:40.793 回答