Java中的static+单例设计模式

一、概念

static是静态关键字,可以修饰成员变量和成员方法

二、静态成员变量

1.静态成员变量

static修饰成员变量表示该成员变量只在内存中存储一份,可以被共享访问、修改。

静态成员变量属于类,直接使用类名访问即可,可以不需要创建对象,是所有对象共享的变量。

2.实例成员变量

无static修饰的成员变量不是静态变量,是实例成员变量,是对象的属性,需要创建对象后才能使用。

3.static成员变量内存原理

在堆内存中开辟类的静态变量区

使用该对象时直接从堆中的类静态变量区访问即可

三、静态成员方法

1.静态成员方法

可以直接用类名访问,也可以用对象访问

如果该方法时一个执行通用功能,或需要方便访问,可以申明成静态成员方法

2.实例方法

必须创建对象后,通过对象调用成员方法

表现对象自己的行为,需要申明成实例方法

3.内存原理

静态方法放在方法区中,调用时提取到栈中

在堆内存中创建对象,对象会有指向方法区的引用

创建对象的同时,方法区中存实例方法

四、注意事项

1.静态方法只能访问静态成员,不能访问实例成员

2.实例方法可以访问静态成员和实例成员

3.静态方法中不可以出现this关键字

五、工具类

类中都是静态方法,每个方法都是以完成一个共用的功能为目的,这个类用来给系统开发人员共同使用的。

工具类使用静态方法——不需要创建对象,方便调用

每个静态方法完成一个功能

工具类方便复用,不需要在每个类中重复写相同功能的代码

六、代码块

1.概述

类的五大成分之一

定义在类中方法外

在Java类下,使用{}括起来的代码,被称为代码块;与类一起加载(优先于方法运行)

2.类型

·静态代码块

格式:static{}

特点:通过static修饰,随着类的加载而加载,并且自动触发,只执行一次

public class StaticDemo {
    //静态代码块
    static {
        System.out.println("……");
        ……
    }
}

静态代码块作用:可以用于初始化静态资源(如:静态成员变量)

·构造代码块

格式:{}

特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行

作用:初始化实例资源

七、单例设计模式

1.概念

设计模式:解决一类开发问题最优的解法(共20多种)

单例模式:保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象

例如:任务管理器,只需要一个就能解决问题了,可以节省空间

2.饿汉单例设计模式

在用类获取对象的时候,对象已经提前创建好了

设计步骤:

①定义一个类,把构造器私有

②定义一个静态变量存储一个对象

public class SingleInstance {
    //创建一个对象,和类一起创建;并且使用了static,使该类只有instance一个对象
    public static SingleInstance instance = new SingleInstance();
    
    //构造方法私有化,其他类不能使用该类的构造方法构造对象,使对象单例
    private SingleInstance(){}
}

3.懒汉单例模式

在真正需要该对象的时候,才去创建一个对象(延迟加载对象)

设计步骤:

①定义一个类,把构造器私有

②定义一个静态私有变量存储一个对象

③提供一个返回单例对象的方法

public class SingleInstance {
    //申明一个对象,但并未分配地址,此时instance=null;这里设置为private不允许外部访问
    private static SingleInstance instance;

    //在需要对象的时候再在这里调用Instance,相当于外部调用接口
    public static SingleInstance getInstance() {
        //如果instance为空才新生成对象,否则直接返回原来的单例对象
        if(instance==null)
            instance = new SingleInstance();
        return instance;
    }
    
    //构造方法私有化,其他类不能使用该类的构造方法构造对象,使对象单例
    private SingleInstance(){}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值