Java初学第二次笔记

一、面向过程

  • 面向过程是以什么正在发生为主要目标进行编程,面对于正在发生的一个问题的解决方案。处理的是已知的事重要的条件都已知的场景。(例如:篮球场上,告诉某一个队员,什么时候,站在什么位置,要拿着球或是抢断球,同时运球(需要描述怎样运球),然后怎样跑去跑过去,怎样去投篮等。但现实肯定不会这样)

二、面向对象

  • 模块化设计,并且可以进行重用配置、设计里更多考虑的是标准。适合解决不确定的、创新性的事件。

  • 例如:找对象 把一个事件、系统分解了之后,找到主要的对象,对象是怎么工作的。
    (口罩工厂,收集材料的对象,运送的对象,制造、安装对的对象,打包的对象)

  • 在进行面向对象程序的开发之中一般还有三个步骤:

    • OOA:面向对象分析
    • OOB:面向对象设计
    • OOP:面向对象编程

面向对象的思考方式

  • 软件工程是由多个对象组成,对象间通过消息相互交流、共同协作,以完成整个系统的功能。
  • 一般地说,面向对象的思维方式就是当你观察问题领域时,你把所观察到的一切都看做作是(对象)。(Java的万物皆对象)

类(class)

  • 共享相同属性、操作、方法、关系或者行为的一组事物的描述符,称为类。简单说,就是分类,将一组事物的某一共性抽象出来而得到的一个概念。例如:人、狗、猫,这三类(当具体的时候就为对象)有什么共性?可以抽象出哺乳动物这一概念。
  • 类的组成部分有类名、类的操作、类的职责描述以及属性。
  1. 对象集合,定义了对象群体的逻辑结构(狭义上逻辑既指思维的规律,也指研究思维规律的学科即逻辑学。广义上逻辑泛指规律,包括思维规律和客观规律。)(即对象的数据、属性、方法、职责),包括属性、操作。
  2. 系统运行时,类作为产生对象的模板。类在物理层面是不存在的。

对象(object)

  • 对象是类的实例化出来的一个具体对象。(举例:学生这一类,找到某学校某班的同学张三)
  1. 系统运行时必须为每一个需要的对象分配内存、保存数据
  2. 对象存在于物理层面,每个对象都有自己的数据空间(内存)
  3. 所有的对象共享同一块代码空间。(分化不同的细胞,遗传物质是一样的)

类与对象核心特征

(1)封装(Encapsulation)

· 封装概念:

  • 将对象的行为和属性封装起来。隐藏对象实现的细节。内部状态不能够为其他对象访问(我对这句话的理解举例,我家的电视机如何工作是看不见的。遥控器是一个对象,电视是一个对象,电视机的内部属性、方法、操作,对遥控器来说是不可见的)(封装举例:将类的属性、类的方法用不同方式封装,如下封装方式表)

· 封装原则:

  • 根据不同对象,公开不同的数据,公开必须公开的信息。

· 封装目的:

  1. 保护类内部的数据、数据结构的安全、完整
  2. 隔离复杂度(内部实现细节不对外公开,例如,我们使用空调,不需要知道空调内部是怎样安装的、如何运行的。空调怎么运行、以何种方式运行,对我们使用空调所要得到的效果都是一样的)。
  3. 提高程序的可维护性(维护更加方便)

· 封装方式:

访问包位置↓ / 权限修饰符→ public private protected (空)
本类 可见 可见 可见 可见
同包其他类或子类 可见 不可见 可见 可见
非同包的类或子类 可见 不可见 不可见 不可见

(2)继承(inheritance)

· 继承概念:

  • 一个对象从其他的类里获取状态、行为,再外加上自己的额外的一些行为、状态。(在父类程序定义了的东西,在子类中可以直接使用,不用再次定义————如此代码可重用)
  • 类与类之间同样具有关系,叫关联。(学生类与教师类)
  • 举例:信鸽继承了鸟类的特征、行为,能够飞等,但信鸽在飞行过程中还能够送信,这是信鸽特有的行为。

· 继承目的:

  • 可缩短软件开发的周期(父亲拼好的积木块,儿子可以直接使用,不用再去拼一个积木块)
  • 重复使用定义好的类,减少系统在使用过程中出现错误的概率

(3)多态(polymorphism)

· 多态概念:

  • 本意:有多种形态。将父类对象应用于子类的特征。(举例:飞机原理图为父类,喷气式飞机、直升机、特技表演机、音速飞机等为子类,将这些子类看作是由父类实例化出来的具体对象,那么现在调用父类便可以直接产生任意的子类)

· 多态解释:

  1. 当一个类从另一个类继承而来,多态使得子类可以代替父类。
  2. 消息发送方不需要知道消息接收方属于哪个子类。
  3. 同一类族的接收者可以按照自己的方式处理消息。(例如:父类是飞机,各种飞机是子类,在父类得到信息制造飞机出来,那么子类便会各自产生各自的飞机(子类实例化对象))
    再以种地为例:一年有四季,四级各不同,村民为一个类,而这一个村子的所有村民都是农民(都是对象),通过查看这一方法,与黄历(这一对象)进行沟通,黄历发出来的信息并不知道是谁(哪一个子类)接受,所有的农民(对象)得到了这个信息(来自黄历这一对象)的信息,然后又接受了天气(这一对象)变化(即传递出来的信息)这一信息,然后就去使用各个村民(各个对象)各自的方法种地(操作),用各自的种子(对象,所有种子可以不同)种各自的地(对象)(种子与土地之间细化,同样存在对象、类、接口,之间传递的信息,相互协作、影响),再有空气中的对象,天气对象,能量对象……长出了不同的各自按照各自处理方式(接收同一消息,时机到了——种地,得到各自的处理结果)所得到的作物。
    这是我个人最能感受的例子
  4. 推论:
    推论1:同一类组的接收者可以按照自己的方式处理同一个消息。
    推论2:有多种对象可以按照自己的方式处理相同的数据。

(4)聚合、组合

  • 聚合:部分和整体的关系(人有两条腿、两只手……人由各种器官聚合而成。汽车有四个*……汽车由各种零件、材料、物件聚合成)
    (1)传递(2)不对称
    组合(composition):整体控制着部分(树死树叶死)

(5)接口、实现

接口:

  • 描述一个类的用户/对象如何与这个类交互的媒介。在多态机制中,比抽象类更方便的方式是将抽象唉各类定义为接口。由抽象方法组成的集合就是接口。(举例:飞机类为父类,“制造飞机”作为一个接口的抽象方法,然后飞机类实现这个接口,同时实现“制造飞机”这个抽象方法,当各种飞机需要制造时,就可以继承飞机类,重写其中的“制造飞机”方法,并改写这个方法为“制造某一种飞机”,这样就可以通过这个标准制造不同的飞机)

实现(抽象的一种方法)

  • 完成接口所定义的功能,如类、构件等完成的任务
  • 举例:TV是客户(Client)、用户,插座电线是接口,发电厂(Sever)是实现。//为什么插座电线是接口,

(6)抽象类

  • 一个对象与其他所有对象相区别的基本特征,因此提供了同观察者角度的有关的清晰定义的概念界限。(对对象的部分特性、操作过滤,留下需要的属性和操作)
  • 举例:飞机是一个父类,“制造飞机”是一种操作/方法,现在执行“制造飞机”这一命令,没人知道制造一个什么样的飞机,并且如果要在飞机中抽象出一个飞机对象,同样也没人知道这究竟是一个怎样的飞机。这一类就叫抽象类。因此,抽象类不能实例化对象。
  • · 抽象是面向对象领域发现,==某些"类"==的主要方法。

三、Java基本数据类型

  • 在Java中,有8中基本数据类型来存储数值、字符和布尔值

(1)数值型

整数类型

数据类型 内存空间(8位等于1字节Byte) 取值范围 默认值
byte 8位 -128~127
short 16位 -32768~32767
int 32位 -231 ~ 231-1
long 64位 -263 ~ 263-1 整型数据默认值全为0
  • 定义类型变量时,要注意变量的取值范围,是否超出。对于long型值,若变量赋值大于或小于int的最大值或最小值,则需要在数字后加L或l,表示该数值为长整数。例:long num = 2147483650L。
  • 整型数据在Java中有三种表示形式:
  1. 八进制
  2. 十进制
  3. 十六进制

浮点类型

数据类型 内存空间(8位等于1字节Byte) 取值范围 默认值
float 32位 1.410-45 ~ 3.40282351038
double 64位 4.910-324 ~ 1.797693134862315710308 浮点型数据默认值全为0.0
  • 在任何情况下,小数都会被看为double型,若使用float,则需要在小数后加F或f。例:定义浮点类型变量,float f1 = 53.21f;

(2)字符型

  1. char型
    表示用于存储单个字符,占用16位(2个Byte)的内存空间。变量用单引号定义。
  2. 转义字符
    以反斜杠“\”开头
    默认值:’ ‘(’\u0000’)

(3)布尔型

  • 通过关键字boolean来定义布尔型变量,只有true和false两个值
  • 默认值为:false
    Java初学第二次笔记

Java初学第二次笔记

总结:以上举例是我理解了的写出来的,有不对的地方还请大家指正,谢谢。
学习进度有点慢,但是理解了以上写的大部分,基本数据类型和C语言相似部分挺多的。继续加油。
学习:

  1. 中国大学MOOC(慕课): https://www.icourse163.org/.
  2. 阿里云大学:https://www.aliyun.com/?spm=5176.11399608.fszjobuve.2.61d14679syuuI8.