【问题标题】:Java static instanceJava 静态实例
【发布时间】:2018-02-18 18:04:57
【问题描述】:

所以我刚刚开始了我的第一个 Java 大项目,我正在学习一些教程,但有些代码我根本看不懂。

package com.Legolando.Runa;

import net.minecraftforge.fml.common.Mod;

@Mod(modid = Reference.MODID, name = Reference.MODNAME, version = Reference.VERSION)
public class Runa {

@Mod.Instance
public static Runa instance = new Runa();
//  I dont get why instance of my class has to be static 

}

如你所见,我在这个类中创建了一个这个类的实例(对我来说已经是 cosmos),这个实例是静态的。有人可以解释什么是静态实例吗?和静态变量或方法一样吗?

【问题讨论】:

  • 是时候拿起一本关于 Java 的书了。在这里为您遇到的每个关键字发布一个问题,您不会非常有效地学习它。
  • 如前所述,在尝试编写实际项目之前,您可能需要阅读一些基本教程。在那之后,您可能需要重新考虑您对第一个项目的选择。使用 Forge 编写 Minecraft mod 是一个相当复杂的第一个项目,我个人建议制作一个较小的独立程序。关于您的实际问题,我什至认为 @Mod.Instance 参数不需要是静态的,它可能无论如何都可以工作。但是你甚至不需要使用@Mod.Instance,因为这是使用它们的名字来获取其他模块的实例。在这种情况下,只需使用 'this'。

标签: java static


【解决方案1】:

这很可能是指软件开发中的一种设计模式,称为单例。

即该类旨在仅具有单个实例,可通过静态方式访问。然而,这不是一个很好的单例示例,因为每个字段都应该通过方法访问。此外,可能需要一个私有构造函数来防止其他类实例化单例。

【讨论】:

    【解决方案2】:

    这段代码让我想起了java中的Singleton Class。

    public class Runa {
    
       private static Runa singleton = new Runa( );
    
       /* A private Constructor prevents any other
        * class from instantiating.
        */
       private Runa() { }
    
       /* Static 'instance' method */
       public static Runa getInstance( ) {
          return singleton;
       }
    
       /* Other methods protected by singleton-ness */
       protected static void demoMethod( ) {
          System.out.println("demoMethod for singleton");
       }
    }
    

    仅供参考,Singleton 确保在应用程序中只为 Runa 类创建一个对象。尝试谷歌一下以更多地了解java中的Singleton usage

    链接: https://www.tutorialspoint.com/java/java_using_singleton.htm

    祝你好运

    【讨论】:

    • 为什么要投反对票?我认为所有类型的用户都有权在本网站上获得问题和答案。
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多