在Java中从静态成员调用非静态方法

ker*_*ill 2 java

这个问题相当复杂,我不知道之前是否曾被问过,因为我不知道如何在搜索框中说出问题.

这是代码:

public class SomeClass 
{
  private static final DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

  public static String toUTCDateString(Date date)
  {
    df.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));
    return df.format(date);
  }

  /* more static methods */
}
Run Code Online (Sandbox Code Playgroud)

静态成员df将在更多静态方法中重新使用,但我需要先将其时区设置为"UTC".有没有办法只召唤.setTimeZone("UTC")一次?或者我必须调用.setTimeZone("UTC")每个静态方法?

Bra*_*raj 7

使用静态初始化块

静态初始化块是用大括号{}括起来的常规代码块,前面是static关键字.这是一个例子:

static {
    // whatever code is needed for initialization goes here
}
Run Code Online (Sandbox Code Playgroud)

一个类可以有任意数量的静态初始化块,它们可以出现在类体中的任何位置.运行时系统保证按照它们在源代码中出现的顺序调用静态初始化块.

示例代码:

public class SomeClass 
{
      private static final DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

      //Static Initialization Blocks
      static{
           df.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));
      }

      public static String toUTCDateString(Date date)
      {     
          return df.format(date);
      }

     /* more static methods */
}
Run Code Online (Sandbox Code Playgroud)