黑马程序员——java基础(面向对象)概述、类、三大特性

来源:互联网 发布:域名查找ip 编辑:程序博客网 时间:2024/04/28 07:47

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


章:面向对象(概述、类、三大特性)



 

本章概括:

第一部分:面向对象概述

第二部分:java

类中成员的介绍和使用事项

类中的关键字

帮助文档的使用

第三部分:三大特性

封装

继承

多态

 

 




第一部分:概述

1、面向对象

面向对象是一种程序设计思想,计算机程序的设计实质上就是将现实中的一些事物的特征抽离出来描述成一些计算机事件的过程,这种抽象的过程中,我们把具体的事物封装成一个一个的整体进行描述,使被描述的对象具备一些系统性、整体性的的行为和特征,我们把这种设计思想称为面向对象。

2、面向对象与面向过程

2.1、面向过程是早期的程序语言设计思想,该思想强调事物的行为细节,即程序的设计不需要封装成一个个的整体,而是将整个程序描述成一个行为,所有行为细节都按照固定方式一步一步的执行,执行程序就是执行某一行为的过程。

2.2、面向对象和面向过程都是一种思想,面向对象是相对于面向过程而言的,

面向过程强调的是具体的功能行为,而面向对象将功能封装进对象,强调具备了功能的对象,面向对象是基于面向过程的,但面向对象思想更接近于现实场景。

3、面向对象具有三大特性:封装、继承和多态。

 





第二部分:java

1、类的定义

类就是现实生活中事物的描述,类是定义同一类事物所有对象的变量和方法的蓝图或原型。

1.1、类和对象的关系:类是对象的抽象描述,对象是这类事物实实在在存在的个体。

2、类中的成员

2.1变量

2.1.1成员变量和局部变量

成员变量:作用于整个类中,存在于堆内存中,随着对象存在而存在。

局部变量:作用于函数或语句中,存在于栈内存中,函数或语句执行完便被释放。

2.2函数

2.2.1、定义:在类中定义的一段独立的小程序,函数在Java中也叫方法。

2.2.2、意义:提高代码的复用性

Java中对功能的的定义是在函数中体现的

2.2.3、定义的要素:

要明确函数的功能

明确有无未知参数参与运算

明确返回值(明确功能结果)

2.2.4、格式:

修饰符  返回值类型  函数名(参数类型 形式参数,...)

{

执行语句

return 返回值

}

2.2.5、语句规范

(1)每一个整体结构的代码段要缩进、对齐

(2)尽量一行写一条语句

(3)每一个大的结构体间尽量隔开一行

 

2.2.6、一般函数的重载:

(1)同一个类可以存在一个以上同名函数,这种形式称为方法的重载

(2)参数类型不同,具体调用哪个方法视调用时传入的参数而定

(3)参数类型相同但返回值类型不同的同名方法不可以存在同一个类中

(4)示例:

void show(int a,double b){}

void show(double a,int a){}

 

扩展:JDK1.5版本后,参数长度可变,但可变的参数必须放在后面(其实是隐式封装了一个参数数组)

2.2.7、函数的分类:

(1)一般函数:定义该类的某些特定功能。

(2)主函数:

主函数是一个特殊函数,作为程序入口,可以被JVM识别调用。

主函数定义:

主函数格式是固定的:public static void main(String[] args){}

public:代表该函数访问权限是最大的

static:表明随着类的加载就已经存在

void:主函数没有具体的返回值

main:不是关键字,是一个特殊的单词,可以被JVM识别

(String[] args):函数的参数,参数类型是一个String数组

 

(3)构造函数:

构造函数的特点:

函数名与类名一致

修饰符与类一致

不用定义返回值类型

不可有return语句

构造函数的作用:

构造函数在对象一建立就运行,用于给对象初始化,只运行一次

当类中没有定义构造函数时,系统会默认给该类加一个空参数的构造函数

当类中定义了构造函数时,系统不再为类加入构造函数

多个构造函数用重载的方法实现

什么时候定义构造函数:

当分析事物时,该事物具备一些固有的特性或行为,可以将内容定义在构造函数中。

 

2.3、静态代码块:static{}

随着类的加载而执行,只执行一次

用于给类初始化

2.4、构造代码块:{}

作用:给对象进行初始化,对象一建立就运行,而且优先于构造函数运行

与构造函数的区别:

构造代码块是给所有对象进行初始化的

构造函数是给对应的对象进行初始化的

构造代码块定义的是所有对象共性的内容

3、对象的初始化过程

(1)静态代码块执行(只在类加载的时候执行,当内存中已加载该类则不执行)

(2)构造代码块执行(每次对象初始化时都执行)

(3)构造函数执行(每次对象初始化都执行相应构造函数)

(4)对象已在内存中开辟好空间,初始化完成

 

4this关键字

4.1this代表本类对象的引用(当前调用它的对象是谁,this就代表谁)

4.2this的作用:

(1)用于区分局部变量和成员变量同名的情况

(2)代表本类函数所属对象的引用

(3)但凡本类功能内部引用本类对象就用this

(4)可在构造函数中使用this()代表构造函数的引用

5static关键字

5.1static是一个修饰符,用于修饰成员,表示静态的意思,成员被静态修饰后除了可以被对象调用外,还可以直接被“类名.成员”调用。

5.2static修饰的成员的特点:

(1)随着类的加载而加载,生命周期最长

(2)优先于对象存在

(3)被所有对象共享

(4)可以直接被类名调用

5.3static修饰的变量也叫类变量

    实例变量和类变量的区别

存放位置:

类变量存在于方法区中,实例变量随着对象的创建存在于堆内存中。

生命周期:

类变量生命周期最长,随着类的加载而加载,随着类的消失而消失,实例变量随着对象的初始化而存在,随着对象的消失而消失。

5.4static的使用注意事项

静态方法只能访问静态成员,非静态方法既可以访问静态成员,也可以访问非静态成员

静态方法中不能定义thissuper关键字

5.5static修饰的利弊

利:节省内存空间,可以直接被类名调用

弊:生命周期过长,访问出现局限性

5.6、静态的应用

(1)什么时候使用静态:当功能内部没有访问到非静态数据时

(2)每一个应用程序中都有一个共性功能,可以将这些功能进行抽取、封装,以便复用(如:工具类)

(3)主函数是静态的

 

6、帮助文档的使用

6.1帮助文档的作用

当编写的代码需要封装好用于外部交流或方便项目其他开发成员使用时需要向对方提供这些代码的说明文档,就可以编辑使用说明文档。

6.2帮助文档的制作

6.2.1按以下格式在java源文件的类、方法、变量前编写说明

在类前面编写:

/** 

类说明内容···

@author 作者

@version 版本

*/

在方法前面编写:

/** 

方法说明内容···

@param 参数名 参数说明

@return 返回值说明

*/

6.2.2在控制台使用“javadoc -d 帮助文档名 -author -version java源文件”创建。

6.2.3注意:创建帮助文档的java源文件的类必须是公有的(public修饰)。

 

 




第三部分:面向对象的三大特性

1、封装

1.1、封装是指:隐藏对象的属性和实现细节,仅对外提供公共访问方式

1.2、封装的好处:

(1)将外界的变化隔离,使程序具备独立、安全和稳定性。

(2)便于设计者使用,提高代码的复用性

1.3、封装的原则

(1)将不需要对外提供的内容都隐藏起来

(2)把实现细节隐藏,提供可以对其进行访问公共的方式

1.4、封装的方式

将某一功能、属性抽离出来,独立写成单独的方法或类

设置访问权限

(1)设置访问权限可以限定该功能或属性可以被特定的访问者访问,保证了程序的安全性和功能的稳定性。

(2)java对类和类中成员都定义了特定的访问修饰符

类:public(公共的) 、default(默认的,不写就默认是它)

类中成员:publicprotecteddefault(默认的)、private 

注:类的访问修饰符可以不写(默认的),也可以写public(公共的),一个java文件中只能有一个被public修饰的类,且被public修饰的类类名必须要跟文件名一致(包括大小写一致),否则编译会出错,为了方便阅读,类名的命名规范是单词的首字母大写,多个单词组成的类名每个单词的首字母都大写

 

 

 

2、继承

2.1、继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的功能,或者说将事物的共性的功能和属性抽取出来定义成一个父类,让后来具有更多样化实现的子类继承父类。

2.2、继承的作用:

(1)父类具备的方法子类可以直接继承过来,不用重新书写,提高了代码的复用性

(2)让类与类之间产生关系,有了关系才有多态的实现

(3)Java中只支持单继承,不支持多继承,因为多继承存在安全隐患(当多个父类存在同个功能时,子类不确定要运行哪一个),Java支持多层继承,即父类还可以继承其他类,java用另一种机制解决单继承的局限性,即多实现

2.3、对继承体系的使用

(1)想要使用体系,应该先查阅父类,因为父类定义了该体系的共性功能,了解了父类的功能,就基本可以使用该体系的功能了

(2)在具体调用时,要创建子类的对象,因为有可能当父类是抽象类时父类不能创建对象,而且子类具备更丰富、更具体的功能实现

2.4继承的特点

2.4.1覆盖(重写)

2.4.1.1如果子父类中的成员一致时,子类成员会覆盖父类成员

2.4.1.2当子类继承父类时,沿袭父类的功能到子类中,但子类对该功能的实现细节不一致,子类可以保留父类对该功能的定义,重写功能的内容

2.4.1.3覆盖与重载:重载只看参数列表,其他一致参数列表不一致为重载,而重写子父类的参数必须要一致

2.4.2 thissuper

this表示当前对象的引用,super表示当前对象父类的引用

2.5子父类中的构造函数

2.5.1构造函数不能重写

2.5.1.1构造函数第一行有一条隐式的语句super()/this()

2.5.1.2在对子类对象进行初始化时,父类构造函数也会运行,因为子类中的构造函数默认第一行有一条隐式的super()语句,这样方便子类构造时先获取到父类的共性属性

2.5.1.3 super()一定要定义在子类构造函数的第一行,当没有默认的空参数构造函数,要手动指定

2.6、注意事项:

2.6.1千万别为了获取其他类中的功能而继承,必须是类与类间有所属关系才可以继承。

2.6.2子类覆盖父类时必须保证子类权限大于等于父类,才可以覆盖,否则编译失败

2.6.3子类静态成员只能覆盖父类静态成员

2.7 final关键字

2.7.1 final关键字可以修饰类、函数和变量

2.7.2final修饰的类不可以被继承(继承打破了封装性)

2.7.3final修饰的方法不可以被复写

2.7.4final修饰的变量只能被赋值一次,既可以修饰成员变量,也可以修饰

2.8 Object

2.8.1java中有一个特殊的类,Object类,它是所有对象的超类(根类),Object类中定义了所有对象的共性成员

2.8.2Object类中的方法

equals() 比较两个对象是否相同

toString() 返回该对象的字符串表示形式

getClass() 获取该对象对应的字节码文件对象

hasCode() 获取该对象的哈希码值

2.9类间的体系关系

继承、聚集(聚合)、组合

2.9.1继承:

指的是一个类继承另外的一个类的功能,并增加它自己的新功能或改写旧有功能的具体实现,继承是类与类之间最常见的关系。

2.9.2聚合:

指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如足球队中的足球队员就是聚合关系。

2.9.3组合:

也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。例如人的各个身体器官之间的关系。

 

3、多态

3.1、多态的定义;某一类事物具备的多种表现形态(猫、狗和动物)

3.2java中多态的表现形式

父类的引用指向自己的子类对象

父类的引用接收自己的子类对象

3.3、多态的前提

必须是类与类之间有关系,要么继承,要么实现

子父类间的成员存在覆盖

3.4、多态的好处与缺陷

好处是提高了程序的扩展性,缺陷是只能使用父类的引用访问父类的方法,无法访问子类的特有方法。

3.5、多态的应用

类型转换

向上转型,自然转型

向下转型,强制父类引用向下转型

3.6、特点

(1)多态中成员函数的特点

编译时看引用变量所属的类中是否有方法

运行时看对象所属类的方法

(2)多态中成员变量的特点

无论编译或运行时都参看右边

多态中静态成员函数的特点

编译或运行时都参看左边

3.7、多态的扩展示例

数据库操作(各种数据库):定义数据库的父类型,由哪类型的数据库调用就由该子类实现其具体操作内容。

 

 



本章总结:

1、类的构成:变量分局部变量、成员变量和类变量,函数有主函数、构造函数和功能函数,对象初始化先后执行静态代码块、构造代码块、构造函数,关键字thissuperstatic的运用,使用注释文档进行注释说明。

2、面向对象思想是一种很接近自然事物间关系的思想,用面向对象的思想进行编程使程序的灵活性和可维护性得到很大的提高,面向对象的三大特性:封装、继承、多态,封装使代码得到更好的利用,继承使类与类之间产生关系,继承是多态的前提,多态使程序的扩展性增强;final的运用,Object是所有类的根类,定义了所有对象的共性功能。

 



------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 



0 0
原创粉丝点击