「java单类」Java基础 单实例类

博主:adminadmin 2022-11-27 01:54:08 61

今天给各位分享java单类的知识,其中也会对Java基础 单实例类进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

JAVA单例模式有哪些?

一、懒汉式单例

在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。

public

class

LazySingleton

{

/**

*

私有静态对象,加载时候不做初始化

*/

private

static

LazySingleton

m_intance=null;

/**

*

私有构造方法,避免外部创建实例

*/

private

LazySingleton(){

}

/**

*

静态工厂方法,返回此类的唯一实例.

*

当发现实例没有初始化的时候,才初始化.

*/

synchronized

public

static

LazySingleton

getInstance(){

if(m_intance==null){

m_intance=new

LazySingleton();

}

return

m_intance;

}

}

二、饿汉式单例

在类被加载的时候,唯一实例已经被创建。

public

class

EagerSingleton

{

/**

*

私有的(private)唯一(static

final)实例成员,在类加载的时候就创建好了单例对象

*/

private

static

final

EagerSingleton

m_instance

=

new

EagerSingleton();

/**

*

私有构造方法,避免外部创建实例

*/

private

EagerSingleton()

{

}

/**

*

静态工厂方法,返回此类的唯一实例.

*

@return

EagerSingleton

*/

public

static

EagerSingleton

getInstance()

{

return

m_instance;

}

}

**************************************************************************************

懒汉方式,指全局的单例实例在第一次被使用时构建;

饿汉方式,指全局的单例实例在类装载时构建

**************************************************************************************

三、登记式单例

这个单例实际上维护的是一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。

public

class

RegSingleton

{

/**

*

登记薄,用来存放所有登记的实例

*/

private

static

Map

m_registry

=

new

HashMap();

//在类加载的时候添加一个实例到登记薄

static

{

RegSingleton

x

=

new

RegSingleton();

m_registry.put(x.getClass().getName(),

x);

}

/**

*

受保护的默认构造方法

*/

protected

RegSingleton()

{

}

/**

*

静态工厂方法,返回指定登记对象的唯一实例;

*

对于已登记的直接取出返回,对于还未登记的,先登记,然后取出返回

*

@param

name

*

@return

RegSingleton

*/

public

static

RegSingleton

getInstance(String

name)

{

if

(name

==

null)

{

name

=

"RegSingleton";

}

if

(m_registry.get(name)

==

null)

{

try

{

m_registry.put(name,

(RegSingleton)

Class.forName(name).newInstance());

}

catch

(InstantiationException

e)

{

e.printStackTrace();

}

catch

(IllegalAccessException

e)

{

e.printStackTrace();

}

catch

(ClassNotFoundException

e)

{

e.printStackTrace();

}

}

return

m_registry.get(name);

}

/**

*

一个示意性的商业方法

*

@return

String

*/

public

String

about()

{

return

"Hello,I

am

RegSingleton!";

}

}

请问java 单例类 与 静态类 有何不同?

它们有自己的作用,灵活运用即可

简单说明:

单例类

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。

最显而易见的好处是,节约开销,比如数据库链接单例的好处是,每次你只要去获取那个数据库的实例就好,不用每次去创建一个实例。

静态类

在一个类中创建另外一个类,叫做成员内部类。这个成员内部类可以静态的(利用static关键字修饰),也可以是非静态的。由于静态的内部类在定义、使用的时候会有种种的限制。所以在实际工作中用到的并不多。

在开发过程中,内部类中使用的最多的还是非静态地成员内部类。不过在特定的情况下,静态内部类也能够发挥其独特的作用。

java开发什么情况下使用单例模式?

java单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。\x0d\x0a特点:\x0d\x0a1,一个类只能有一个实例;\x0d\x0a2,自己创建这个实例;\x0d\x0a3,整个系统都要使用这个实例。\x0d\x0a--------------------------------\x0d\x0aSingleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。一些资源管理器常常设计成单例模式。\x0d\x0a外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时调用。\x0d\x0a内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置。这样的系统应当由一个对象来管理这些属性文件。\x0d\x0a--------------------------------\x0d\x0a单例模式,能避免实例重复创建;\x0d\x0a单例模式,应用于避免存在多个实例引起程序逻辑错误的场合;\x0d\x0a单例模式,较节约内存。

Java EE应该如何创建单例类

一. 什么是单例模式

因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。

二. 单例模式的特点

1. 单例模式只能有一个实例。

2. 单例类必须创建自己的唯一实例。

3. 单例类必须向其他对象提供这一实例。

三.单例模式的实现

懒汉模式

public class SingletonDemo {

private static SingletonDemo instance;

private SingletonDemo(){

}

public static SingletonDemo getInstance(){

if(instance==null){

instance=new SingletonDemo();

}

return instance;

}

}

2. 线程安全的懒汉模式

public class SingletonDemo {

private static SingletonDemo instance;

private SingletonDemo(){

}

public static synchronized SingletonDemo getInstance(){

if(instance==null){

instance=new SingletonDemo();

}

return instance;

}

}

3. 饿汉模式

public class SingletonDemo {

private static SingletonDemo instance=new SingletonDemo();

private SingletonDemo(){

}

public static SingletonDemo getInstance(){

return instance;

}

}

4. 静态类内部加载

public class SingletonDemo {

private static class SingletonHolder{

private static SingletonDemo instance=new SingletonDemo();

}

private SingletonDemo(){

System.out.println("Singleton has loaded");

}

public static SingletonDemo getInstance(){

return SingletonHolder.instance;

}

}

5.双重校验锁法

public class SingletonDemo {

private volatile static SingletonDemo instance;

private SingletonDemo(){

System.out.println("Singleton has loaded");

}

public static SingletonDemo getInstance(){

if(instance==null){

synchronized (SingletonDemo.class){

if(instance==null){

instance=new SingletonDemo();

}

}

}

return instance;

}

}

java单类的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java基础 单实例类、java单类的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-27,除非注明,否则均为首码项目网原创文章,转载请注明出处。