super关键字与单例

简介:

Super关键字作为父类对象和选择父类构造器使用。与this关键字类似,只不过是this代表当前对象和转发构造器,说的简单点就是super就是用来做与父类相关的访问调用的,super关键字只能在实例方法和构造器中使用,不能在静态方法和main方法中使用。Super关键字加 用来调用父类的方法。例如:

wKioL1nniIagaxnYAA4LC8jqaEc764.png

此时super相当于代表着父类对象来调用这个方法。


  super写在子类构造器用于调用父类构造器的话,只能写在第一行代码上。使用super选择父类构造器只能写在构造器内,不能写在方法、main方法内。super();写法就是用于选择父类构造器,括号里传递什么参数类型就调用拥有什么类型的构造器。例如:

wKiom1nni0Lx7A7KAAwcHENXrzo461.png



  使用super调用父类方法时,先访问最近继承的那个父类,如果这个父类没有这个方法就会一直往上调用直到找到为止。

wKiom1nni0eT1uhkAAuw-xPU4ds143.png


 如果是所有的父类都有被调用的那个方法,就会调用最近的一个 。例如:

wKioL1nniJizACJUAAt86PgoI8M587.png





设计模式:

Java中共有23种设计模式,大致分为三类:创建类、行为类、结构类。

 

单例设计模式:

  定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

 

  单例模式是用来使得一个类只产生一个对象,使这个对象成为系统中唯一的实例。代码的写法是首先需要将构造器私有化,私有化构造器的目的是不让外部构建这个类的对象,然后申请一个静态属性,属性的类型就是这个类名,在这个属性里新建一个对象,这样在类加载的时候就会构建对象,最后写一个静态方法将这个对象返回出去。

 

单例模式的优点:

  1.在内存中只有一个对象,节省内存空间。

  2.避免频繁的创建销毁对象,可以提高性能。

  3.避免对共享资源的多重占用。

  4.可以全局访问。

 

适用场景:

  由于单例模式的以上优点,所以是编程中用的比较多的一种设计模式。我总结了一下我所知道的适合使用单例模式的场景:


  1.需要频繁实例化然后销毁的对象。

  2.创建对象时耗时过多或者耗资源过多,但又经常用到的对象。

  3.有状态的工具类对象。

  4.频繁访问数据库或文件的对象。

  5.以及其他我没用过的所有要求只有一个对象的场景。

 

单例模式注意事项:

 

  1.只能使用单例类提供的方法得到单例对象,不要使用反射,否则将会实例化一个新对象。

  2.不要做断开单例类对象与类中静态引用的危险操作。

  3.多线程使用单例使用共享资源时,注意线程安全问题。

 

单例模式的代码写法:

  称之为单例三部曲

  1.构造器私有化  

  2.私有静态属性里新建一个对象  

               3.一个公开的静态方法,以自己的实例为返回值,返回出去这个实例

  例如:

wKiom1nni1WDqSREAAy93H79U_o586.png




本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1974048,如需转载请自行联系原作者

相关文章
|
设计模式 存储
static应用之 单例设计模式(饿汉单例&懒汉单例)
本章我们来学习单例模式中的饿汉单例和懒汉单例,那么什么是单例模式呢?应用该模式的这个类永远只有一个实列,即一个类只能创建一个对象例如电脑上的任务管理器对象只需要一个就能解决问题,可以节省内存空间先定义一个类,把构造器私有如下图,先来看一下没有把构造器私有化的SingleInstance类,此时Test类中可以随意创建多个SingleInstance的实例化。 在SingleInstance类中用private修饰无参构造器,此时左边new方法报错了。我们在右边创建一个静态变量来存储对象,变量名为instan
75 0
|
8月前
|
程序员 C++
c++ 创建对象
c++ 创建对象
55 0
|
编译器 C++
C++中虚继承时的构造函数
在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。 下面我们以菱形继承为例来演示构造函数的调用: #include <iostream> using namespace std; //虚基类A class A{ public: A(int a); protected: int m_a; }; A:
128 1
|
测试技术 uml
super关键字
super关键字
61 0
|
安全 Java
饿汉式单例
饿汉式单例
|
编译器
Super关键字详解
Super关键字详解
98 0
|
Java 程序员 C#
用静态工厂方法代替构造器
用静态工厂方法代替构造器
95 0
Zp
父类静态代码块、非静态代码块、构造方法、子类静态代码块、子类非静态代码块、子类构造方法执行顺序
父类静态代码块、非静态代码块、构造方法、子类静态代码块、子类非静态代码块、子类构造方法执行顺序
Zp
79 0
|
设计模式 缓存 JavaScript
什么是单例模式?怎么生成单例类? - 1/14
什么是单例模式?怎么生成单例类? - 1/14
89 0

热门文章

最新文章