java static是单例_JAVA基础-static关键字及单例设计模式

static关键字

基本概念使用static关键字修饰成员变量表示静态的含义, 此时成员变量由对象层级提升为类层级, 也就是整个类只有一份并被所有对象共享. 该成员变量随着类的加载准备就绪, 与是否创建对象无关

static关键字修饰的成员可以使用引用.的方式访问,但推荐类名.的方式

使用方式在非静态成员方法中, 既能访问非静态的成员又能访问静态的成员

(成员: 成员变量 + 成员方法. 静态成员被所有对象共享)

在静态成员方法中, 只能访问静态成员不能访问非静态成员

(成员: 成员变量 + 成员方法. 因为此时可能还没有创建对象)

在以后的开发中, 只有隶属类层级并被所有对象共享的内容才可以使用static关键字修饰(不能滥用static关键字)

构造块和静态代码块构造块: 在类体中直接使用{}括起来的代码块

每创建一个对象都会执行一次构造块

静态代码块: 使用static关键字修饰的构造块

静态代码块随着类加载时执行一次

案例题目编程实现Singleton类的封装

编程实现SingletonTest类对Singleton类进行测试, 要求main方法中能得到且只能得到该类的一个对象public class Singleton {

// 2.声明本类类型的引用, 指向本类类型对象

// 在类中创建好对象, 然后送到类外

/* 只看等号左边,就相当于是类的成员变量, 且该成员变量隶属对象层级

// 若类外想要访问这个变量, 就需要使用对象 也就是的方式

// 但是现在类外是无法创建对象的, 所以就需要将该成员变量提升为类层级的

//Singleton sin = new Singleton();

*/

// 为了防止Singleton sin = null 使引用变量无效,所以私有化,类外就不能直接访问

// 使用private static共同修饰

private static Singleton sin = new Singleton();

// 1.私有化构造方法, 使用private关键字修饰

private Singleton() {}

// 3.提供公有的get方法负责将对象返回

// 使用static关键字修饰, 将该方法提升为类层级

public static Singleton getInstance(){ // 通过该方法能得到且只能得到这个类的一个对象

return sin;

}

/**

* 自己写了构造方法 , 就不会再调用系统默认的构造方法

* 因为私有化构造方法后, 类外就一个对象都不能创建

*

*/

}

接下来创建SingletonTest类进行测试public class SingletonTest{

public static void main(String[] args) {

// 声明Singleton类型的引用, 指向Singleton类型的对象

// 类名 引用变量名 = new 类名();

// Singleton st1 = new Singleton();

// Singleton st2 = new Singleton();

// System.out.println(st1 == st2); // false

/**

* 只要可以调用构造方法, 就可惜创建一个新对象, 也就不满足题目中的“得到且只能得到一个对象”的要求

* 所以将构造方法私有化后, 在类外就不能使用, 也就是不能使用new方法创建对象

*/

// Singleton st1 = Singleton.sin; // Singleton.sin就是类内创建的对象

// Singleton.sin = null; // 使得引用变量无效

Singleton s1 = Singleton.getInstance();

Singleton s2 = Singleton.getInstance();

System.out.println(s1 == s2); // true

/**

* 无论.getInstance()调用多少次, 都指向类内同一个创建对象的语句, 所以也就是只一个对象

* 另, 类内创建对象的语句是类层级, 是随类的创建而加载, 所以只要这个类整体只运行一次, 那么也就只创建一个对象

*/

}

}

单例设计模式

概念

在某些特殊场合中, 一个类对外提供且只提供一个对象时, 这样的类叫做单例类. 而设计单例的流程和思想叫做单例设计模式

实现流程私有化构造方法, 使用private关键字修饰

声明本类类型的引用指向本类类型的对象, 并使用private static关键字共同修饰

提供公有的get方法负责将对象返回出动,并使用public static关键字共同修饰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值