当前位置: 首页 > 知识库问答 >
问题:

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

锺离德运
2023-03-14

这个问题相当复杂,我不知道以前是否有人问过,因为我不知道如何在搜索框中表达这个问题。

下面是代码

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 */
}

静态成员df将在更多静态方法中再次使用,但我需要首先将其时区设置为“UTC”。有没有方法调用<code>。setTimeZone(“UTC”)一劳永逸?或者我必须调用<code>。setTimeZone(“UTC”)在每个静态方法中?

共有2个答案

江鸿羲
2023-03-14

不幸的是!简单的数据格式不是trread安全的:它保持一个内部状态,同时使用会出现严重破坏。

这“解决”了您的问题,因为您必须更改API。

public static DateFormat df()
{
    DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    df.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));
    return df;
}

在使用其他更好的类的Java8中,这个问题得到了解决。

顺便说一下,yyyy-MM-dd是ISO标准。

阎安邦
2023-03-14

使用静态初始化块

静态初始化块是括在大括号 { } 中的普通代码块,前面是 static 关键字。下面是一个示例:

static {
    // whatever code is needed for initialization goes here
}

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

示例代码:

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 */
}
 类似资料:
  • 问题内容: 尝试在静态类中调用非静态方法时遇到错误。 无法从类型播放中静态引用非静态方法methodName() 我不能使该方法静态,因为这也给我一个错误。 此静态方法无法从xInterface隐藏实例方法 有什么办法可以在另一个静态方法中轮回调用非静态方法?(这两种方法位于单独的包和单独的类中)。 问题答案: 从静态方法中调用非静态方法的唯一方法是使类的实例包含非静态方法。根据定义,非静态方法是

  • 我最近对 PHP 5.4 进行了更新,但收到有关静态和非静态代码的错误。 这是错误: 这是第371行: 我希望有人能帮忙。

  • 我正在使用存储库模式并尝试建立模型之间的关系。当我尝试运行存储()方法(在控制器中),该方法试图使用用户()方法(与方模型建立关系)时,我收到以下错误消息: 非静态方法不应该静态调用::user(),假设$this来自不兼容的上下文 我不明白为什么在尝试运行user()relationship方法时会出现此错误,但所有其他方法(包括$this- 以下是相关代码:

  • 我正在努力得到一个用户的基础上,他的id或电子邮件后,他登录通过一个表单。这个函数是在user.class.php中定义的,我想在另一个名为profile.php的php文件中调用它,但它仍然给我带来语法错误,我不知道如何修复它。 错误:不推荐使用:不应静态调用非静态方法User::GetUserId()注意:未定义变量:email in 使用getters和setters,函数 下面是profi

  • 本文向大家介绍在一个静态方法内调用一个非静态成员为什么是非法的?相关面试题,主要包含被问及在一个静态方法内调用一个非静态成员为什么是非法的?时的应答技巧和注意事项,需要的朋友参考一下 由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。

  • 我一直试图用我的验证代码进行php pear验证,但我收到的都是严格标准错误--问题是什么?我如何修复它? 电子邮件验证.php