以正确的方式将私有变量传递给main()?

时间:2013-02-13 01:41:46

标签: java

这是我的代码:

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。

2 个答案:

答案 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在运行时

中访问它