【问题标题】:what does static initializer with no assignment mean?没有赋值的静态初始化器是什么意思?
【发布时间】:2014-12-14 14:52:41
【问题描述】:

我看到了这个post

静态初始化器。它用于提供非平凡的初始化 对于你的类的静态变量

然后我看到了这段代码:

public class CommandFactory {
    private CommandFactory() {
    }

    static {
        new CommandFactory();
    }

它的目的是什么? (因为没有分配给任何领域)

【问题讨论】:

  • 我假设构造函数懒惰地初始化了一些资源。
  • 它是静态初始化器,在类加载时执行。
  • 你在哪里看到这个代码?

标签: java static initialization


【解决方案1】:

作者的意图可能是为其构造函数的side-effects 实例化CommandFactory

【讨论】:

  • 但是它调用的是一个空的构造函数,那么有什么副作用呢?
  • 运行实例初始化器。
  • @Eran 也许只是为了举例。
【解决方案2】:

这段代码没有多大意义。它使用空构造函数创建实例,因此没有副作用。并且对创建的实例的引用没有存储在任何地方,因此您以后甚至无法访问它。

这可能是一个简化的示例,旨在解释某些原理,但在当前形式下,它是无用的。

【讨论】:

    【解决方案3】:

    在上下文之外,这个 sn-p 没有任何意义,除了喂垃圾收集器
    但是关于名称CommandFactory 和私人 ctor 似乎是不完整的 单例示例,应该是这样的:

    public class CommandFactory {
        private static CommandFactory instance;
    
        private CommandFactory() {
        }
    
        static {
            instance = new CommandFactory();
        }
    
        public static CommandFactory getInstance() {
            return instance;
        }
    }
    

    左右:

    public class CommandFactory {
        private static CommandFactory instance = new CommandFactory();
    
        private CommandFactory() {
        }
        //...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 2020-07-17
      相关资源
      最近更新 更多