有没有一种方法可以初始化静态字段?

时间:2019-08-01 11:46:33

标签: java initialization field

如何使用方法初始化类中的字符串数组?

private static String[] strNrs2 = 
{"Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};  

private static String[] colo = arr();


private String[] arr(){
     String[] str99 = new String[strNrs2.length];
     for (int i = 0; i<strNrs2.length;i++){
       str99[i]= new StringBuilder(strNrs2[i]).reverse().toString();

    }
    return str99;
    }

我想要这个:

private static String[] strNrs2 = 
{"Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};

看起来像这样:

 private static String[] strNrs = 
 {"oreZ","enO","owT","eerhT","ruoF","eviF","xiS","neveS","thgiE","eniN"};

但是我只想做一次。因为我计划遍历将使用该数组的方法一百万次。因此,它将大大降低我的运行速度。

完整代码:

  public class IntToStr {
  private static String[] strNrs2 = {"Zero","One","Two","Three","Four","Five","Six",
"Seven","Eight","Nine"};  

    public static String intToStr(int nr) {

        StringBuilder str = new StringBuilder("");

        while (nr>0) {
           int pop = nr%10;
            nr= nr/10;
            str.append(new StringBuilder(strNrs2[pop]).reverse().toString());  
//By using this str.append(strNrs[pop]); runtime will increase considerably.

        }
        return str.reverse().toString();
    }

    public static void main(String[] args) {

        for (int i = 0; i<10000000;i++)
            intToStr(5555555);
            System.out.println("Finished");

    }



} 

1 个答案:

答案 0 :(得分:1)

以下数组初始化:

private static String[] colo = arr();

不起作用,因为arr()是非静态方法,因此不能在初始化static变量的静态上下文中调用它。

为了使arr()数组初始化起作用,您必须将static设为static方法:

private static String[] arr() {
    ...
}