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关键字共同修饰
java static是单例_JAVA基础-static关键字及单例设计模式相关推荐
- java static 修饰变量吗_Java面试 - static 修饰的变量和方法有哪些特点?
1.static修饰的变量和方法,在类加载时即被初始化,可直接通过类名.变量名和类型.方法名进行调用. 2.static修饰的变量,在类加载时会被分配到数据区的方法区.类的实例可共享方法区中的变量.如 ...
- java继承原理内存角度_Java基础知识巩固
最近发现自己的Java基础知识还是有点薄弱,刚好有点空闲时间进行再补一补,然后进行整理一下,方便自己以后复习.其实个人认为Java基础还是很重要的,不管从事Java后端开发还是Android开发,Ja ...
- java 的对象类用_java基础(第零篇)对象与类
前言: 本文讲述java中对象与类的一些概念.包括对象与类的有关概念,类间五种关系,类的访问权限等. 在java中,一切都可以用对象来描述,操作对象的标识符只不过是对象的一个引用,一个对象可以有多个引 ...
- java的时间日期类_Java基础学习:日期时间类
Date 类 所在的包:java.util.Date Date 类表示特定的瞬间,精确到毫秒.创建对象的值为从1970年1月1日00:00:00 到当前系统显示时间所经历的毫秒数. 例如:public ...
- java商场购物幸运客户练习题_JAVA基础语法练习(一)
一.基础案例 1.训练案例1 1.1.训练描述 键盘录入一个int类型的数据,使用三元运算符判断这个数是奇数还是偶数 import java.util.Scanner; public class X2 ...
- java怎么访问静态属性_Java基础——java静态变量面试题
Java面试中主要考察的就是应聘者的基础知识的掌握情况,静态变量是属于静态存储方式,是java中基础性的内容.下面就为大家准备了10道java静态变量面试题,希望可以帮助到有面试需要的朋友们. 1.s ...
- java中volatile的含义_java中volatile关键字的含义
(支持原创)本篇文章非原创,原文章地址: http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html 在java线程并发处理中,有一 ...
- java 静态变量的使用_java的static静态变量是不是不安全的?应该如何正确的使用他呢...
类中的静态变量在程序运行期间,其内存空间对所有该类的对象实例而言是共享的,为了节省系统内存开销.共享资源,应该将一些变量声明为静态变量. 代码一: public class MemoryTest { ...
- java与c内存管理_Java基础--Java内存管理与垃圾回收
Java自动内存管理 在讲解内存管理之前,首先需要了解对象和对象引用的区别 对象是类的一个实例,以人这个类为例,Person是我们定义的一个类 public class Person{} public ...
最新文章
- delphi 串口通信发送_STM32第五章串口通讯详解
- php解析html类库simple_html_dom
- php双分支语句【三个数排序】
- linux设置静态IP及克隆后修改IP和hostname
- 标志寄存器EFLAGES
- hive学习08天-一次hvie面试题
- C#如何测量字符串的高度宽度和精确取得字符串的高度宽度
- [笔记]MySQL 配置优化
- 前端开源项目周报0221
- 智慧路灯解决方案-最新全套文件
- 记一款价廉物美的小型DAC+耳放----Dr.DAC
- n位整数去掉m位后求最大值问题
- 数据库中COMMENT关键字的使用
- html设置首缩选进两字符,首行缩进2字符怎么设置 css
- 深度学习【使用pytorch实现基础模型、优化算法介绍、数据集的加载】
- Kafka安装(windows)
- 认证模式之Digest模式
- 一次探索:基于香农熵预测DNA中编码序列,python实现。
- 使用虚拟主机安装cyberpanel面板并创建wordpress站点
- 滴滴出行为什么要推一个“全民拼车日”?
热门文章
- request 获取url
- HDOJ 2074 叠筐
- OpenCV-人像—酷感冷艳滤镜
- php网站怎么对接微信群,PHP对接微信公众平台消息接口开发流程教程
- 通达信波段王指标公式主图_通达信波段王主图指标公式
- mysql config type_mysql_config_editor用法举例
- dbvisualizer报错No JVM
- linux正则表达式脚本实例,Shell下的正则表达式及实例
- mysql双主启停_Mysql 多实例配置与启停
- python字符串_(Python基础教程之七)Python字符串操作