文档章节

Java基础之this关键字,静态代码块,单例设计模式

微尘鉴
 微尘鉴
发布于 2014/05/28 10:08
字数 688
阅读 18
收藏 0

This关键字 

this:就代表本累的对象

this代表它所在函数所属对象的引用。

简单说: 哪个对象在调用this所在的函数,this就代表哪个对象。

this的应用: 当定义类中功能时, 该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。

但凡本类功能内部使用了本类的对象,都用this表示。


静态代码块

格式:static {静态代码块中的执行语句。}

静态代码块的特点: 随着类的加载而执行,只执行一次,并优先于主函数。

用于给类惊醒初始化的。(一般用于初始化对象。)


对象调用成员过程

 对象的初始化过程

Person p=new Person("zhangsan",20);

该句话都做了什么事情?

1.因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中。

2.执行该类中的static代码块,如果有的话,给Person.class类进行初始化。

3.在堆内存中开辟空间,分配内存地址。

4.在堆内存中建立对象的特有属性,并进行默认初始化。

5.对属性进行显示初始化。

6.对对象进行构造代码块初始化。

7.对对象进行对应的构造函数初始化。

8.将内存地址付给栈内存中的p变量。


单例设计模式

单例设计模式:解决一个类在内存只存在一个对象。

想要保证对象唯一:

1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。

2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。

3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。

 

这三部怎么用代码提现呢?(以下代码方式为:饿汉式)

1.将构造函数私有化。(private Single(){};

2.在类中创建一个本类对象。(private static Single s = new Single(); 

3.提供一个方法可以获取到该对象。(public static Single getInstance(){ return s; }

 

对于事物该怎么描述,还怎么描述 

当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。

先初始化对象的为饿汉式,调用才初始化对象的为懒汉式。

Synchronized(懒汉式加到static后边,可以只进一个对象,但效率低,可双重判断,但代码量增加了)

记录原则:定义单例,建议使用饿汉式。


© 著作权归作者所有

上一篇: 相关链接
下一篇: 序列化
微尘鉴
粉丝 8
博文 80
码字总数 30075
作品 0
海淀
高级程序员
私信 提问
23种设计模式(1):单例模式

定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 类型:创建类模式 类图: 类图知识点: 1.类图分为三部分,依次是类名、属性、方法 2.以<<开头和以>>结尾的为注释...

LCZ777
2014/07/05
199
0
【23种设计模式之一】单例设计模式(翻译)

引言: 这一系列文章,翻译自网络上的文章,不过中间会夹杂着个人的理解,非原创,不过中文应该算是原创。 下面介绍,使用设计模式的一些好处: 1、设计模式是已经在工业生产中使用的,用于解...

敲代码猥琐男
2015/01/13
633
2
Java程序员从笨鸟到菜鸟之(三十三)大话设计模式(三)单例模式

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 单例模式属于对象创建型模式,其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点。对一些类来说...

长平狐
2012/11/12
152
0
Java之美[从菜鸟到高手演变]之设计模式

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代...

只想一个人静一静
2014/02/25
209
2
从 Java 到 Scala (三): object 的应用

本文由 Captain 发表在 ScalaCool 团队博客。 在上篇 Java 到 Scala 系列中,我想你或多或少在语言特性上对有了一定的掌握,在了解完它酷酷的语言特性——让静态回归常态并能简单运用其衍生出...

ScalaCool
2018/09/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
5
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
10
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
8
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部