软件构造第3章——抽象数据类型(ADT)和面向对象编程(OOP)(一)

3.1 基本数据类型、对象数据类型

基本数据类型对象数据类型
int,long,boolean,double,byte,short,float,char(单个字符如’A’)类,接口,数组,枚举,注释(String:一系列字符,BigInteger:任意大小整数)
价值不可变(Mutability)有的价值可变,有的不可变
小写大写字母开头
使用成本低成本高
无法实现表达的统一表达和泛型一致

3.1.1 对象的层次结构

Object类是所有类的基类,所有类都默认继承Object类。

3.1.2 基本数据类型的包装类

将基本数据类型封装为对象

Boolean, Integer, Short, Long, Character, Float, Double

在编译时语言会对基本数据类型和包装类进行自动转换
如图示例:
在这里插入图片描述

3.1.3 运算符和操作

运算符加减乘除和’=’,运算优先法则与C语言中一样,String类中’+'代表将字符串连接。
操作:操作是接受输入和产生输出的功能(有时会更改值本身)
三种形式:

  1. 作为前、中、后缀操作符
  2. 对作为对象的方法,如:bigint1.add(bigint2),调用操作add
  3. 作为一个函数功能,如:Math.sin(theta),调用操作sin

3.1.4 运算符和操作

相同操作名称用于不同的数据类型。

3.1.5 复杂的数据类型

  1. Arrays:

     Array数组:固定长度
     List:可变长度,接口
     Set:抽象接口
     Map:抽象接口
     List、Set、Map的成员必须是对象。 
    

在这里插入图片描述

  1. 迭代器:可变类型
    两种形式
    在这里插入图片描述
    在这里插入图片描述

3.2 静态类型检查、动态类型检查

3.2.1 静态与动态数据类型

  1. 静态数据类型:编译期间做检查数据类型的语言,即写程序时要声明所有变量的数据类型,是固定的。使用数据之前,必须先声明数据类型(int ,float,double等)。相当于使用之前,首先要为它们分配好内存空间。
  2. 动态数据类型:运行期间才做数据类型检查的语言,即动态类型语言编程时,永远不用给任何变量指定数据类型。该语言会在第一次赋值给变量时,在内部将数据类型记录下来

Java是静态类型语言,编译器可以根据已知的变量类型推断出所有表达式的类型,而且IDE支持输入时语法检查。

3.2.2 类型检查

  1. 静态类型检查:针对类型
    编译时检查错误, 避免因使用错误类型的操作而导致的bug。

     语法检查、名称检查、参数数量和类型检查、返回值类型检查
    
  2. 动态类型检查:针对特定值
    运行时检查。(但是Java不会检查)

     非法参数值:如分母为0
     非法参数:不可返回的数据类型
     超出范围的索引:如数组越界
     调用空对象的方法:空指针
    

3.3 Mutable/Immutable

  1. 不可变性:比较安全。
    (1) 不可变数据类型:一旦一个数据类型(对象)被创建并且初始化。这个数据类型的值就不会变化,有关它的方法都不是改变该数据类型本身,而是重新创建了一个新的数据类型。
    (2) 不可变引用:指定引用位置后不可再次指定,使用final。

     final类:
     1. 不能被继承
     2. 始终包含相同的值/引用,不能更改
     3. 不能被子类重写
    

(3)例:不可变数据类型String在“a”末尾添加后缀“b”,需要重新新建一个String
在这里插入图片描述
(4)List、Set、Map和BigDecimal、BigInteger使不可变数据类型。

  1. 可变性:可以改变变量值。不太安全,但相比不可变类型,进行操作时使用空间小,而且做全局 变量,方便共享。例:可变类型StringBuilder
    “a”加后缀“b",直接改变变量值。
    在这里插入图片描述

3.4 值的改变、引用的改变

改变引用:改变指向对象的指针
改变值:改变指针下所指的对象
String类型下进行操作后:t、s由刚开始指向相同引用,进行操作改变引用,指向不同的对象,所以最终数值不同,而StringBuilder指向相同的对象,进行做后改变的是指针下的值,而没有改变引用,所以值相同。
在这里插入图片描述
在这里插入图片描述

3.5 防御式拷贝

为对象返回新副本,以避免可变类型带来的危害。但会占用额外的空间。
(1) 修改构造器,对实例中每个可变的参数进行防御性拷贝

在这里插入图片描述
在这里插入图片描述

3.6 Snapshot diagram

快照图表示程序在运行时的内部状态。如正在进行的方法及局部变量,以及当前存在的状态。

  1. 基本数据类型值
    在这里插入图片描述
  2. 对象值:有圆圈,以下都对。
    在这里插入图片描述
  3. 不可变类型:双边框
    在这里插入图片描述
  4. 可变类型:单边框
    在这里插入图片描述
  5. 不可变量引用:双箭头
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值