我知道静态变量是在运行时加载的,尽管我认为我理解这个问题,但我在下一个E的初始化辛格尔顿实现中遇到了麻烦:
在紧急初始化中,Singleton类的实例是在类加载时创建的,这是创建单例类的最简单方法,但它有一个缺点,即即使客户端应用程序可能不使用实例,也会创建实例。
public class EagerInitializedSingleton {
private static final EagerInitializedSingleton instance = new EagerInitializedSingleton();
//private constructor to avoid client applications to use constructor
private EagerInitializedSingleton(){}
public static EagerInitializedSingleton getInstance(){
return instance;
}
}
如果类的构造函数是< code>private,如何在类加载时创建类实例?它只有一个< code>public入口点,客户端必须显式调用它,对吗?
我将从我目前的项目中给出一个非常新的例子。一些模式的Hibernate存储库被急切地初始化为单模式。还有一些客户机使用外部web服务。同时,我们想要工作的子系统不需要访问数据库。尽管如此,该应用程序在专用网络之外并没有受到惊吓。此外,如果任何数据库服务器停止,应用程序将无法再次启动。
如果您急切地加载任何单例,请确保它们至少没有任何对外部系统的引用!
加载类时初始化静态变量。
在调用EagarInitializedSingleton.get实例()
时加载该类,但如果访问类似EagarInitializedSingleton.class
的内容,则可以更早地加载该类。
为什么在 Eager 初始化中,在类加载时创建的单例类实例可以考虑一个缺点?
正如你引用的原文所说:
"...它有一个缺点,即即使客户端应用程序可能没有使用它,也会创建实例。
为什么这是一个缺点?
因为:
如果类的构造函数是私有的,那么如何在类加载时创建类实例?
它是在计算实例
的初始化表达式时创建的。当初始化 EagerInializedSingleton
类时会发生这种情况......这通常在加载类时发生。
表达式调用私有构造函数。但这没关系,因为类中的代码可以看到它自己的私有字段/方法和构造函数。
这是否意味着当我们调用getInstance方法时,类正在被加载?
不一定。在那之前可能会发生。但在那之后就不会发生了。
1-…除非您创建了初始化依赖周期。
我已经完成了一些Java教程,它们都说在调用类时创建一个新变量。这是为什么?我已经测试了一些代码,但它没有这样做。我已经使用python很长一段时间了,所以我习惯于使用动态语言。 请看下面我一直在玩的一些代码: 谢谢你的时间。
本文向大家介绍简单了解java类的初始化以及类的实例化,包括了简单了解java类的初始化以及类的实例化的使用技巧和注意事项,需要的朋友参考一下 前言 上一篇我们知道了一个类的生命周期是:加载->验证->准备->解析->初始化->使用->卸载。 当初始化完成以后,一个类所有的类变量(被static修饰的变量)都被赋值。但是未被static修饰的成员变量又是何时被赋值的呢? 一个类何时会被初始化 一个
我知道类和抽象类的主要区别是,抽象类不能被实例化, 但是我可以为抽象类创建对象 我用新的关键字创建了抽象的对象 我有一些问题在 Inet 上没有正确的答案, new关键字是否用于实例类? 2)实例只不过是对象吗? 3)mEarth被称为物体(地球的实例)吗? 现在我可以调用任何方法(作为回调或作为值返回)mearth . sand();mearth . land();使用地球物体
本文向大家介绍创建一个类Person的简单实例,包括了创建一个类Person的简单实例的使用技巧和注意事项,需要的朋友参考一下 创建一个类Person,包含以下属性:姓名(name)、年龄(age)、朋友(friends数组)、问候(sayhi方法,输出问候语,例如:“你好!”)、交朋友(addFriend方法,向friends里添加一个值),然后创建两个此类的实例:“小张“,22,[“小李”,”
我对英语不是很熟悉。我会试着解释这个问题。我正在学习使用spring-boot框架。我正在配置模型部分。所以我使用注释@Entity、@Table创建了数据库表 在创建表之后,我为每个表创建了DAO。 我正在学习一个教程,但我没有做其他的事情。 > 操作 } DAOS: pom.xml: 应用程序.属性:
我有一个带有“LevelManager”单例实例(并与之接口)的“SingletonManager”类。“LevelManager”GameObject不应该在整个应用程序生命周期内持久存在,并且应该在每次加载新级别时替换为新实例。 在运行我当前的代码时,当场景第二次加载时,“LevelManager”似乎丢失了,尽管场景中有GameObject(附加脚本)。我意识到这可能是因为我仍在尝试访问旧的