【问题标题】:Is there a way to initlalize a static field with a method?有没有办法用方法初始化静态字段?
【发布时间】:2019-08-01 11:46:33
【问题描述】:

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

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");

    }



} 

【问题讨论】:

  • 静态并不意味着恒定。您可以在静态初始化程序中更改它。
  • 使您的 arr() 方法静态化。
  • 它确实有效!谢谢。就是这么简单……哈哈

标签: java initialization field


【解决方案1】:

以下数组初始化:

private static String[] colo = arr();

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

您必须使 arr() 成为 static 方法,以便 static 数组初始化工作:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2011-04-15
    相关资源
    最近更新 更多