面向对象编程全解(精华篇)

适合于对软件开发感兴趣的初学者(初学者的福利)

掌握面向对象思想

图片

面向对象特性

图片

面向对象知识点全解

图片

图片

1.面向对象编程的最基本特征在于其封装性和继承性,通过封装能使对象类的定义和对象的实现分开,通过继承能体现类与类之间的关系,由此二引出其多态。

2.多态性

可用"一个对外界面,多个内在实现形式"来表示。Java通过方法重载和方法重写以及接口来实现多态。

3.多态是面向对象的重要特性,简单点说:"一个接口,多种实现",就是同一种事物表现出的多种形态。

4.多态允许将子类的对象当作父类的对象使用,某父类型的引用指向其子类型的对象,调用的方法是该子类型的方法

5.面向对象的三大特性

封装、继承、多态

6.多态的定义

指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。

7.多态的作用

消除类型之间的耦合关系

8.多态分两种

(1).编译时多态:编译时动态重载

(2).运行时多态:指一个对象可以具有多个类型,方法的覆盖

9.多态的好处

(1).可替换性(substitutability)。多态对已存在代码具有可替换性。

(2).可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。

(3).接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。

(4).灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。

(5).简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

10.结构化程序设计语言

数据结构+算法

11.面向对象程序设计语言

(数据结构+算法)类+(数据结构+算法)

12.所有面向对象程序设计语言的三大特点

(1).类

把一类具有共同属性和特征的事物抽象归纳的形式。一个集合,也就是所谓的类。

(2).类有哪两方面的特征

静态特征和动态特征

静态特征

体现在类的属性,也就是类的成员。

动态特征

体现在类的动作,也就是类的成员方法。

(3).多态(静态多态、动态多态)

13.继承

(1).公有继承

除了私有的不能继承,原来是什么权限,继承以后依然还是什么权限。

(2).保护继承

除了私有成员不能继承以外,所有继承的成员变成了保护权限。

(3).私有继承

除了私有成员不能继承,所有继承的成员,全部变成了私有权限,私有继承能继承保护成员,也能继承公有成员。

14.常用关键字的用法

public

类的内部和类的外部都可以访问

private

只有类的内部可以访问

protected

表示只有类的内部可以访问

static

修饰类的成员

(1).静态成员方法

作用:声明该方法为整个类所有,不为某一具体类对象所有

特点:不能访问非静态成员变量

(2).静态成员变量

作用:声明该变量为整个类所有;

特点:初始化只能只能放在类外,类型  类名::变量名 = 初始值

(3).静态全局变量

限制该全局变量的作用域只限于本文件,不能通过extern关键字声明为其他文件所用

(4).静态局部变量

扩大了该局部变量的声明周期,从应用程序开始到程序结束。

(5).静态全局函数

限制该全局方法的作用域只限于本文本,不能通过extern关键声明为其他文件所用

图片

extern

声明外部全局变量或者全局函数为本文件所用,尽量不要在头文件中定义变量和函数

volatile

(1).volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

(2).作用

表示用volatile定义的变量会在程序外被改变,每次都必须从内存中读取,而不能把他放在cache或寄存器中重复使用, volatile可以保证对特殊地址的稳定访问,不会出错。

(3).表明某个变量的值可能在外部被改变,因此对这些变量的存取不能缓存到寄存器,每次使用时需要重新存取。该关键字在多线程环境下经常使用,因为在编写多线程的程序时,同一个变量可能被多个线程修改,而程序通过该变量同步各个线程。

(4).编译器优化介绍

内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内存变量缓存到寄存器;调整指令顺序充分利用CPU指令流水线,常见的是重新排序读写指令。

(5).volatile的使用情况

1).中断服务程序中修改的供其它程序检测的变量需要加volatile

2) 多任务环境下各任务间共享的标志应该加volatile

3).存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义

4).并行设备的硬件寄存器(如:状态寄存器)

5).一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

6).多线程应用中被几个任务共享的变量

final的用法

final类不能被继承,没有子类,final类中的方法默认是final的 

final方法不能被子类覆盖,但可以继承 

final变量/常量只能一次赋值,不可更改 

final不能修饰构造方法

final参数

当方法参数为final类型时,可以读取使用该参数,但是无法改变该参数的值

static final的用法 

(1).对于变量,表示一旦给值就不可修改,并且通过类名可以访问。 

(2).对于方法,表示不可覆盖,并且可以通过类名直接访问。 

(3).对于被static和final修饰过的实例常量,实例本身不能再改变了,但对于一些容器类型(比如:ArrayList、HashMap)的实例变量,不可以改变容器变量本身,但可以修改容器中存放的对象。

15.ArrayList和LinkedList的区别

(1).ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

(2).对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针。

(3).对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

16.ArrayList和LinkedList在性能上各有优缺点

(1).对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。

(2).在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。

(3).LinkedList不支持高效的随机元素访问。

(4).ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。

(5).总结

当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList。

原文链接

面向对象编程(精华篇)

如果对文章感兴趣,可以扫一扫微信二维码关注微信公众号,后续会推送更多干货文章,感谢支持。

图片

Guess you like

Origin blog.csdn.net/u011426115/article/details/120630718