super关键字与单例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了super关键字与单例相关的知识,希望对你有一定的参考价值。

super关键字:

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

技术分享

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


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

技术分享



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

技术分享


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

技术分享





设计模式:

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

 

单例设计模式:

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

 

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

 

单例模式的优点:

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

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

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

  4.可以全局访问。

 

适用场景:

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


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

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

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

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

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

 

单例模式注意事项:

 

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

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

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

 

单例模式的代码写法:

  称之为单例三部曲

  1.构造器私有化 

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

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

  例如:

技术分享


本文出自 “12831981” 博客,请务必保留此出处http://12841981.blog.51cto.com/12831981/1974048

以上是关于super关键字与单例的主要内容,如果未能解决你的问题,请参考以下文章

flutter 中factory(构造方法上的唯一对象) 与单例模式

Java面向对象--单例(Singleton)设计模式和main方法

Blazor CascadingParameter 与单例 DependencyInjection

简单工厂与单例

Java Object 序列化与单例模式 [ 转载 ]

多线程与单例模式