JAVA整理

Java成长之路(一)

Posted by MiaoMiaoMiao on December 13, 2020

Java成长之路

今天新开一个坑,将我之前学习和整理的Java相关资料分享出来;和大家一起进步;

面向对象的程序设计方式

万物皆对象

  • 将对象视为奇特的变量,它可以存储数据或者在自身上执行操作;

程序是对象的集合,它们通过发消息,告知彼此需要做的;

  • 要想请求一个对象,就是对这个对象发送消息,可理解成某个特定对象的方法的周期请求;

每个对象都有由其他对象所构成的存储

  • 可以通过创建包含现有有对象的包的方式来创建新的对象;

每个对象都拥有类型

  • 每个对象都是某个类(class)的实例(instance),每个类的区别就是可以发送什么消息对它;

某一个特定类型的所有对象都可以接受同样的消息

  • 图形包含在几何形内,几何形所有的性质,图形也具备。(可替代性)

对象

  • 对象具有状态,行为和标识;
  • 每一个对象在内存中都有一个唯一的地址;
  • 内部数据,描述对象是什么(数据特性)
  • 方法说明能干什么(功能)

相关重点

  • 类描述了具有相同的特性(数据,状态)和行为(方法)功能的对象集合;
  • 完成对对象的请求,只完成某种任务,这些请求就是由对象的接口所定义;
  • 接口定义了对某一种特定对象,所发出的请求;
  • 程序中必须有满足这些请求的代码,而这些代码与隐藏的数据一起构成了实现;
Light lt(对象实例) = new light()(这是个对象); -实例化
lt.on(); //.向对象发送消息; on()为接口

每个对象都提供服务

  • 程序设计:把对象理解成服务提供者,我们的母的就是创建或寻找到一系列对象来解决面临的问题;
  • 寻找并创建对象结合来解决问题;
  • 对象的集合(方法)->解决问题;
  • 面向对象的设计中,每个对象能够很好地完成一个任务,而不是多个;
  • 对象只做一件事,方法只做一件事;

被隐藏的具体实现

程序开发

  1. 类创建者:提供服务,构建类;
  2. 客户端程序段:实现应用开发的类,消费; (开发过程中注意隐藏软件脆弱的地方)

访问控制

  1. 让客户端程序员无法触及他们不应该触及的部分;
  2. 类创建者可以随意的修改,而不会影响客户端程序员的调用;

Java的访问指定词

(同一个包的前提下-包访问权限)

  • public 任何人都可以访问;
  • private 只能是类创建者或类的内部调用,其他都不能使用;
  • protect 和private相近,只是允许其他继承类访问其方法;

复用具体实现

  • 最简单的复用方式就是使用一个类的对象,或者将那个类的一个对象置于新类中=>创建一个成员对象;
  • 使现有类合成新的类,称为组合;
  • 若组合是动态的=>聚合(aggregation)
  • 通常新的成员对象,通常被声明为private;

继承

  • 原始的基类(超类,父类)做出变化,“子类”也会反映出变化;
  • 区分派生类和基类的方法是改变现有基类方法行为,它被称为覆盖(overriding),要想一个覆盖方法,只需要在派生类中重新定义这个方法即可;
  • 基类和派生类可以使is-a的关系,叫做纯粹替换;也可以是’is-like-a’的关系;

多态

  • 传统意义上编译器不能进行函数调用;
  • 通过集成,程序直到运行是才能确定代码的地址;
  • 编译器在运行之后,并不会知道执行的确切代码,但会对参数和返回类型做检查。
  • 发送消息给对象时,如果不知道接受的具体类型是什么,但最终执行正确,这就是对象的“多态性”
  • OOP是通过“动态绑定”的方式来实现对象的多态性的;

单继承结构

  • java单继承结构:共同父类Object;
  • 有利用GC;

集合

  • list常用语保存序列;
  • Map用于管理数组:常用于将对象与其他对象关联;
  • Set:只能保存个非重复的值;
  • 队列(queue),树(Tree),栈(stack),堆(Heap)
  • 每次取出元素都要做额外的“向下转型”,对程序需和程序都是一种开销;
  • 以某种方式创建集合,以确认保存元素的具体类型,减少“向下转型”的开销;=>参数化类型机制

选择集合的原因

  1. 结合可以提供不同类型的接口和外部行为;
  2. 不同的结合对某些操作有不同的效率; (ArraryList: 随机找到元素高效;Linkedlist: 随机找效率低下,反之在LinkedList汇总插入元素要比ArrayList高)

对象创建于生命周期

  • Java使用动态内存分配,每次创建对象时,使用new关键字构建该对象的动态实例;
  • Java的内存管理是建立在垃圾收集器上的;

(Miao注: 封装:将数据编程黑匣子-保证数据安全性;继承:extend;多态)

bye