单例模式和内部类的初步认识
单例模式比较高深,老师引入了集群的概念:相同的东西复制很多份
比如一个节点集群,可以理解成很多个jvm,他们统一由一个配置文件配置,那么这个配置文件实例化一次还是多次?
那么这个配置文件保存一次还是多次?
实例化多次,而实际上只有一次-----单例
java中,在某些场景下,一个进程中只允许一个对象的实例,那么我们把这种设计模式称为单例/单态
比如代码A:
将构造方法实例化,只能本类中访问,但是要求是外部类获得一个A对象,但是在外部又不能实例化A,而且必须是,获得同一个同一对象,所以采用加public,static和return的方法,这样就能类.方法获得一个statici对象A。
public class A {private String name="张三";private static A a;private A(){System.out.println(name);}public static A getA(){if (a==null) {a=new A();}return a;}}
在B类中测试一下,返回: 张三 turn
public class B {public static void main(String[] args) {A a=A.getA();A a2=A.getA();System.out.println(a==a2);}
}
需要注意的是,A里的getA()这样的方法是懒汉写法,相对简单的还有一个饥饿写法,但是这两种写法都是 非线程安全 的写法,为何不安全现在还用不到。个人猜测在多线程里如果这样new对象返回是否会造成new多个对象?
-----------------------------------------------------------------------------------------------------------------------
内部类老师说实际上用的并不多,用的话也是双层,因为内部类里还可以写内部类,而且会生成 外部类$内部类.class这样的文件,所以嵌套太多会生成太多。
需要记住的是内部类的特点,可以访问外部类的成员变量,包括private!
例子:
外部类为out,内部类为inner,打印结果为:
可以看出,一般内部类确实可以直接打印外部类的加了private修饰符的变量,而且一般变量和静态变量都能打印出来,而且根据当前对象this的不同也能分辨出内部类和外部类变量,而静态内部类内部可以定义一般变量,但是它访问外部类的静态变量。
内部哪里还经常使用呢?------->方法的回调(扩展)
public class Test {public static void main(String[] args) {Inner inner=new Out().new Inner();inner.show();inner.show2();inner.show3();inner.show4();Inner2 inner2=new Inner2();inner2.show();} }
public class Out {private String name="外部类的一般变量";private static String name2="外部类的静态变量";private String name3="外部类的name";public class Inner{private String name3="内部类的name";public void show(){System.out.println(name);} public void show2(){System.out.println(name2);}public void show3(){System.out.println(Out.this.name3);}public void show4(){System.out.println(Inner.this.name3);System.out.println(this.name3);} }public static class Inner2{//String name2="内部类2";public void show(){System.out.println(name2);}} }
单例模式和内部类的初步认识相关推荐
- 设计模式——3单例模式(Singleton)
3.单例模式(Singleton) 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处: 1.某些类创建比 ...
- 设计模式(创建型模式)——单例模式(Singleton)
2019独角兽企业重金招聘Python工程师标准>>> 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这 ...
- Java的二十三种设计模式(单例模式、工厂方法模式、抽象工厂模式)
从这一块开始,我们详细介绍Java中23种设计模式的概念,应用场景等情况,并结合他们的特点及设计模式的原则进行分析. 创建型模式(5种):用于描述"怎样创建对象",它的主要特点是& ...
- Java单例模式优化写法
转载自 http://blog.csdn.net/diweikang/article/details/51354982 Java单例模式优化写法 方法一:推荐 [java] view plain co ...
- Java经典设计模式-创建型模式-单例模式(Singleton)
2019独角兽企业重金招聘Python工程师标准>>> 单例模式(Singleton) 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JV ...
- java设计模式学习 ----- 单例模式(Singleton)
单例模式(Singleton) 单例对象(Singleton)是一种经常使用的设计模式. 在Java应用中,单例对象能保证在一个JVM中,该对象仅仅有一个实例存在.单例模式也分三种:懒汉式单例.饿汉式 ...
- 设计模式【单例模式】
单例设计模式是设计模式中使用最为普通的模式之一.它是一种对象创建模式,用于产生一个对象的实例,它可以确保系统中一个类只产生一个实例.在Java语言中,这样的行为能带来两大好处: (1)对于频繁使用的对 ...
- java设计模式(四)--单例模式
Singleton最熟悉不过了,下面学习单例模式.转载:http://zz563143188.iteye.com/blog/1847029 单例对象(Singleton)是一种常用的设计模式.在Jav ...
- 设计模式第一讲:单例模式(IBM开发者论坛已经发表的文章)
插播小广告,本人的<大话Java性能优化>一书已经在亚马逊.京东.当当.天猫出售,提前谢谢大家支持. 单例模式 首先我们来讲一个故事.二次世界大战的时候,我国有一个著名的战役叫" ...
- 多线程下的单例模式详解
1. 单例模式 (1) 单例模式简介 (2) 实现方式 ① 饿汉式 ② 懒汉式 2. 多线程下的单例模式 (1) Synchronized (2) 双重检查锁 (3) 双重检查锁+Volatile 补 ...
最新文章
- sphinx error connection to 127.0.0.1:9312 failed (errno=0, msg=)
- Java 数字用二进制表示,以及原码,反码,补码、负数的二进制表示
- 哪家中国公司为Java 16贡献最多?Java第一大厂居然不是第一的...
- [云炬创业基础笔记] 第三章测试1
- 即时通讯音视频开发(五):认识主流视频编码技术H.264
- 同一事务中未提交的写能读到吗_03、MySQL事务的隔离性分析
- Hibernate一对一映射示例注释
- python获得对象对应的类名称
- 网络爬虫python的特点有哪些_为什么写网络爬虫天然就是择Python而用
- eclipse 3.7 search 报resource is out of sync with the file system 解决方法
- mysql之主从复制
- LeetCode之SQL练习:第二高薪
- 双击IE出现打开方式解决办法
- vue设置proxy代理,如何去查看代理地址
- 未经授权,直接划扣资金!这些支付机构的用户要小心
- springMVC 面试题整理
- 计算机网络_实验16_网络故障导致环路
- execute,executeQuery和executeUpdate的区别
- http劫持软件、怎么应对这样的 HTTP 劫持
- 一份不错的正则入门文章
热门文章
- 风之大陆互通服务器账号,风之大陆有几个服务器?服务器互通吗?
- 手机安装python模块吗_1-Python-非root用户安装Python及Python模块
- C/C++[PAT B1022]D进制的A+B
- 算法:插入排序、归并排序、快速排序、堆排序
- 算法:Three sum求三个数之和
- PyTorch搭建GoogLeNet模型(在CIFAR10数据集上准确率达到了85%)
- linux SCP远程拷贝文件方法及not a regular file 错误解决方法
- bash给脚本加进度条_shell脚本进度条。
- 目标追踪论文之狼吞虎咽(2):在线被动攻击学习
- 最新最全latex在sublime上的配置步骤全解