面向对象中比较重要的this,static,super,单利设计的总结和归纳

来源:互联网 发布:web3.0与云计算 编辑:程序博客网 时间:2024/06/05 11:42

/*

面向对象中比较重要的this,static,super,单利设计的总结和归纳

*/

在上一讲中,我们贯穿讲解了面向对象中的一些三大支柱,那么在这一讲中,我们将介绍三个常见关键字的理解。

this:this的应用看上去很复杂,但实际上,它就是指当前对象。this最经典的用法是在当局部变量或者参变量与成员变量名相同的时候,我们如何操作呢?这就是重点。比如:

class Fu

{

private String name;

private int age;

Fu(String name ,int age)

{

this.name=name;

this.age=age;

}

}这段程序就是对this的一个经典引用。当构造函数的参变量与成员变量同名的时候,不能写成name=name。但是我们要使用构造函数初始化成员,怎么办呢?只能使用this关键字登场啦!这个对象的name=参变量的name。这样来理解。

构造函数可以调用成员函数,采用的是对象调用方式。但是多个构造函数怎么来调用呢?如果使用对象调用就会有麻烦?因为实例化对象的时候会调用与之对应的构造 函数。该对象的引用就是指向对应 的,那么此时想调用其他的构造函数怎么办?解决这个问题,this关键字就派上用场了。

class Fu{

private String name;

private int age;

Fu(String name)

{

this.name=name;

}

Fu(String name ,int age)

{

this.name=name;

this.age=age;

}

}这样写代码是可以的,但是我们觉得不高效。明显感觉这一块有复制多余痕迹

Fu(String name ,int age)

{

this.name=name;

因为之前已经做过这件事了,现在又来重复。没有调高代码复用性。因为有一个构造函数,刚好处理过这个问题,如果此时可以复用它多好!


运行的结果为:


此时使用this可以使得构造函数可以相互调用。这种思维在我们学习开发的过程中应该相当重视,如果有现成的,那么我们就应该调用。这是开发中使用API开发中要特别注意的知识点!

static:

这是一个静态关键字。用来修饰成员(包括成员变量和成员函数)

被静态修饰的成员具有以下几个特点:

(1):随着类的加载而加载。

(2):它优先于对象存在,因为它是定义类后,就会存在于类中。而对象需要实例化后才会存在。

(3):被所有对象所共享,是一个公共区域,其作用类似于构造代码块。

(4):它的访问除了对象操作,还可以由类名直接操作。

一般情况下能不用就避免使用static因为它的存在周期是整个类中,随着类的消失而消失。很浪费内存空间。使用static要特别注意以下几点:

(1)静态方法只能访问静态成员(静态变量,静态函数)

(2)静态方法中不能使用this和下面要讲的super关键字,因为this和super分别指的是:当前对象和它的父类对象。有了对象才可以使用。static优先于对象,所以不能使用。

(3)主函数是静态的,是程序的唯一的入口!

那么接下来问题来了?什么时候使用静态?

当对象中出现数据共享的时候,该数据就应该被定义为静态修饰。这是对于静态变量说的。

那么什么时候定义成静态函数呢?

当功能内部没有使用到非静态数据时,那么就可以将该函数定义为静态。这种函数往往为工具类函数,比如:比较,排序,等等这类功能会比较方便。直接使用类名操作避免创建对象浪费栈内存空间。

super:

super关键字的使用在本质意义上与this是异曲同工之妙。不同的是指向不同,但用法和它的实际意义是相同的。

单利模式:

那么问题来了?什么是单利模式?解决一个类中只能存在一个对象。看到这里可能很多人都会很迷糊,因为new不就产生了一个对象么?如何才能做到只能有且仅有一个呢?

我们把构造函数私有化,此时自然就不可以在通过new来创建对象了。那么我们怎么使用对象呢?当然是用封装过程中提供的方法来访问对象啦!

单利设计的本质就是私有化,然后提供方法获取操作。尤其要注意提供的引用为私有静态常量。这个核心知识点。


与懒汉式最大的区别的是:饿汉式一旦建立引用就必须要制定对象。懒汉式就是延时加载,需要的时候就创建对象,这个有线程危险。需要锁定同步代码块。



0 0
原创粉丝点击