Java成长之路
今天新开一个坑,将我之前学习和整理的Java相关资料分享出来;和大家一起进步;
面向对象的程序设计方式
万物皆对象
- 将对象视为奇特的变量,它可以存储数据或者在自身上执行操作;
程序是对象的集合,它们通过发消息,告知彼此需要做的;
- 要想请求一个对象,就是对这个对象发送消息,可理解成某个特定对象的方法的周期请求;
每个对象都有由其他对象所构成的存储
- 可以通过创建包含现有有对象的包的方式来创建新的对象;
每个对象都拥有类型
- 每个对象都是某个类(class)的实例(instance),每个类的区别就是可以发送什么消息对它;
某一个特定类型的所有对象都可以接受同样的消息
- 图形包含在几何形内,几何形所有的性质,图形也具备。(可替代性)
对象
- 对象具有状态,行为和标识;
- 每一个对象在内存中都有一个唯一的地址;
- 内部数据,描述对象是什么(数据特性)
- 方法说明能干什么(功能)
相关重点
- 类描述了具有相同的特性(数据,状态)和行为(方法)功能的对象集合;
- 完成对对象的请求,只完成某种任务,这些请求就是由对象的接口所定义;
- 接口定义了对某一种特定对象,所发出的请求;
- 程序中必须有满足这些请求的代码,而这些代码与隐藏的数据一起构成了实现;
Light lt(对象实例) = new light()(这是个对象); -实例化
lt.on(); //.向对象发送消息; on()为接口
每个对象都提供服务
- 程序设计:把对象理解成服务提供者,我们的母的就是创建或寻找到一系列对象来解决面临的问题;
- 寻找并创建对象结合来解决问题;
- 对象的集合(方法)->解决问题;
- 面向对象的设计中,每个对象能够很好地完成一个任务,而不是多个;
- 对象只做一件事,方法只做一件事;
被隐藏的具体实现
程序开发
- 类创建者:提供服务,构建类;
- 客户端程序段:实现应用开发的类,消费; (开发过程中注意隐藏软件脆弱的地方)
访问控制
- 让客户端程序员无法触及他们不应该触及的部分;
- 类创建者可以随意的修改,而不会影响客户端程序员的调用;
Java的访问指定词
(同一个包的前提下-包访问权限)
- public 任何人都可以访问;
- private 只能是类创建者或类的内部调用,其他都不能使用;
- protect 和private相近,只是允许其他继承类访问其方法;
复用具体实现
- 最简单的复用方式就是使用一个类的对象,或者将那个类的一个对象置于新类中=>创建一个成员对象;
- 使现有类合成新的类,称为组合;
- 若组合是动态的=>聚合(aggregation)
- 通常新的成员对象,通常被声明为private;
继承
- 原始的基类(超类,父类)做出变化,“子类”也会反映出变化;
- 区分派生类和基类的方法是改变现有基类方法行为,它被称为覆盖(overriding),要想一个覆盖方法,只需要在派生类中重新定义这个方法即可;
- 基类和派生类可以使is-a的关系,叫做纯粹替换;也可以是’is-like-a’的关系;
多态
- 传统意义上编译器不能进行函数调用;
- 通过集成,程序直到运行是才能确定代码的地址;
- 编译器在运行之后,并不会知道执行的确切代码,但会对参数和返回类型做检查。
- 发送消息给对象时,如果不知道接受的具体类型是什么,但最终执行正确,这就是对象的“多态性”
- OOP是通过“动态绑定”的方式来实现对象的多态性的;
单继承结构
- java单继承结构:共同父类Object;
- 有利用GC;
集合
- list常用语保存序列;
- Map用于管理数组:常用于将对象与其他对象关联;
- Set:只能保存个非重复的值;
- 队列(queue),树(Tree),栈(stack),堆(Heap)
- 每次取出元素都要做额外的“向下转型”,对程序需和程序都是一种开销;
- 以某种方式创建集合,以确认保存元素的具体类型,减少“向下转型”的开销;=>参数化类型机制
选择集合的原因
- 结合可以提供不同类型的接口和外部行为;
- 不同的结合对某些操作有不同的效率; (ArraryList: 随机找到元素高效;Linkedlist: 随机找效率低下,反之在LinkedList汇总插入元素要比ArrayList高)
对象创建于生命周期
- Java使用动态内存分配,每次创建对象时,使用new关键字构建该对象的动态实例;
- Java的内存管理是建立在垃圾收集器上的;
(Miao注: 封装:将数据编程黑匣子-保证数据安全性;继承:extend;多态)