您的位置:首页 > 编程语言 > Java开发

java编程相关总结(一)

2016-06-28 09:48 260 查看

java编程相关总结(一)

java编程相关总结是一个持续更新的系列,是本人对自己多年工作中使用到java的一个经验性总结,也是温故而知新吧,因为很多基础的东西过了这么多年,平时工作中用不到也会遗忘掉,所以看看书,上上网,查查资料,也算是记录下自己的笔记吧,过一段时间之后再来看看也是蛮不错的,也希望能帮助到正在学习的人们,本系列将要总结一下几点:

面向对象的编程思想

java的基本语法

一些有趣的框架解析

实战项目的整体思路

代码的优化以及性能调优的几种方案

其它遗漏的东西以及补充

面向对象的编程思想

有一天一个朋友突然问我什么是装箱(自动将基本数据类型转换为包装器类型),什么是拆箱(自动将包装器类型转换为基本数据类型),当时我忘了,后台查了下资料才明白就是基本类型数据到包装类型数据的自动转换过程,其实当时也有点印象,但是不敢说,因为平时用的很多但是具体的概念可能遗忘了。所以很早之前我就萌生了这个念头,写点东西记录下自己的知识,也检查一下自己遗忘了那些东西。
同样的情况,那么什么是对象呢?什么是类?什么是内部类?什么是接口?抽象类又是什么?包又是什么?
这些基本的概念可能每个同行都懂,但是让你用具体的语言描述出来可能很多人都会有迟疑。


编程语言的目的

在《think in java》中写到,所有编程语言的最终目的都是提供一种抽象的方法。那么首先你得理解什么是抽象抽象是无法亲自看到的,需要充分利用思维。抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。要抽象,就必须进行比较,没有比较就无法找到共同的部分。

编程语言的诞生,就是为了解决一些同样类型的问题,对这些需求的抽象,也因为受到了一定的局限性,在属于自己的领域里面可能非常方便使用,但是遇到其它问题就会显得十分笨拙,后来的许多“命令式”语言(如FORTRAN,BASIC 和C)也是对汇编语言的一种抽象。与汇编语言相比,这些语言已有了长足的进步,但它们的抽象原理依然要求我们着重考虑计算机的结构,而非考虑问题本身的结构。在机器模型(位于“方案空间”)与实际解决的问题模型(位于“问题空间”)之间,程序员必须建立起一种联系。这个过程要求人们付出较大的精力,而且由于它脱离了编程语言本身的范围,造成程序代码很难编写,而且要花较大的代价进行维护。由此造成的副作用便是一门完善的“编程方法”学科。因为不同类型的需求诞生的多门语言,对程序员来说是负担,这边促使程序员不停的学习。而面向对象的程序设计思路则在此基础上跨出了一大步。

面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。万物皆是对象,可以当他是一种新型的变量,也可以当成一个独立的计算机,他保存数据,也可以对自己进行操作。理论上讲,可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象。

根据面向对象的思想来看程序,它就是一大堆对象的集合。通过消息传递,每个对象都知道自己要做的事情,想想一下,这种场景其实就像是人类社会。每个人分工明确,但是人与人之间又有区别,都是独立的个体,有自己个性的东西。在程序中,也可以用面向对象的思想来解决问题。

明确了面向对象的思想,那么就更容易理解什么是对象什么类了这种问题了,接下来进行一些理论性的总结:

对象的基本概念

对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。

主动对象是一组属性和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行(称作主动服务)。

类的基本概念

类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。

消息

消息就是向对象发出的服务请求,它应该包含下述信息:提供服务的对象标识、服务标识、输入信息和回答信息。服务通常被称为方法或函数。

面向对象的三大特性

封装性,继承性和多态性。

封装

首先,属性可用来描述同一类事物的特征,方法可描述一类事物可做的操作。封装就是把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用。

a.概念:封装也称为信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与交互。也就是说,用户无需知道对象内部方法的实现细节,但可以根据对象提供的外部接口(对象名和参数)访问该对象。

b.好处

1. 实现了专业的分工。将能实现某一特定功能的代码封装成一个独立的实体后,各程序员可以在需要的时候调用,从而实现了专业的分工。

2. 隐藏信息,实现细节。通过控制访问权限可以将可以将不想让客户端程序员看到的信息隐藏起来,如某客户的银行的密码需要保密,只能对该客户开发权限。

继承

就是个性对共性的属性与方法的接受,并加入个性特有的属性与方法

概念:一个类继承另一个类,则称继承的类为子类,被继承的类为父类。

目的:实现代码的复用。

理解:子类与父类的关系并不是日常生活中的父子关系,子类与父类而是一种特殊化与一般化的关系,是is-a的关系,子类是父类更加详细的分类。如class dog extends animal,就可以理解为dog is a animal.注意设计继承的时候,若要让某个类能继承,父类需适当开放访问权限,遵循里氏代换原则,即向修改关闭对扩展开放,也就是开-闭原则。

结果:继承后子类自动拥有了父类的属性和方法,但特别注意的是,父类的私有属性和构造方法并不能被继承。另外子类可以写自己特有的属性和方法,目的是实现功能的扩展,子类也可以复写父类的方法即方法的重写。

多态

多态的概念发展出来,是以封装和继承为基础的。

多态就是在抽象的层面上实施一个统一的行为,到个体(具体)的层面上时,这个统一的行为会因为个体(具体)的形态特征而实施自己的特征行为。(针对一个抽象的事,对于内部个体又能找到其自身的行为去执行。)

概念:相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。

理解:子类以父类的身份出现,但做事情时还是以自己的方法实现。子类以父类的身份出现需要向上转型(upcast),其中向上转型是由JVM自动实现的,是安全的,但向下转型(downcast)是不安全的,需要强制转换。子类以父类的身份出现时自己特有的属性和方法将不能使用。

抽象类概念

如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。

下面要注意一个问题:在《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”,但是后面发现如果一个类不包含抽象方法,只是用abstract修饰的话也是抽象类。也就是说抽象类不一定必须含有抽象方法。个人觉得这个属于钻牛角尖的问题吧,因为如果一个抽象类不包含任何抽象方法,为何还要设计为抽象类?所以暂且记住这个概念吧,不必去深究为什么。

抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。



由一组支持程序开发的类组成。

接口

一系列方法体的集合,抽象类的延伸。

脚注

转载请注明出处。1.

该博客同步更新在个人博客网站:www.klsstt.com.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息