HIT软件构造学习笔记-第三章(上)

3.1数据类型与类型检验
*mutable和immutable的区别
*snapshot diagram

一.数据类型(本质为集合)
1.分类:
基本数据类型:int等
面向对象的数据类型:类

2.区别:
基本数据类型存放在栈中(在栈中只存放数值,不存放变量)
类则存放在堆中(不同的对象要分开存储)

3.类:
类具有继承关系,相当于集合的包含关系

二.数据类型的检测
1.静态类型检测:
相当于直接检测,在编译的过程中就能直接报错
(1)语法错误
(2)类名/函数名错误
(3)参数数目错误/类型错误
(4)返回值类型错误
eg:int a = 9.7 编译器会直接报错

2.动态类型检测:
在程序运行的过程中进行检测
(1)非法的参数值
(2)非法的返回值
(3)越界
(4)空指针
eg:分母不能为0,静态检测就无法检测出这个结果

3.静态检测和动态检测是一个递进的关系,动态检测的强度要高于静态检测

三.mutable和immutable
首先我们思考改变一个变量和改变一个变量的值有什么区别?
改变变量:改变了存储空间
改变变量的值:改变了存储空间中的数值

1.immutable types:不变数据类型
一旦被创建,其数值就不能被改变

eg:final:一般在设计immtable类的时候都会用到final,它表示程序员的一种设计决策,也就是不可改变性

2.mutable types:可变数据类型
与immutable相对相应的,可以进行改变数值的类型

eg:
String类型为典型的immutable types
String Builder为mutable types
(在后面snapshot diagram会有详细的讲解这两个类)

3.immutable types与mutable types
在这两者之间做选择,就相当于在安全和性能之间做选择
immutable types更加安全
mutable types则比较灵活

四.snapshot diagram(画图)
软件构造的三个维度:
(1)run time/build time
(2)moment and period
(3)code or component
snapshot diagram:run time moment code(用于描述程序运行时的内部状态)

1.基本类型的值:

eg:基本数据类型直接用箭头
在这里插入图片描述
2.对象类型的值:

eg:
在这里插入图片描述
(1)
String s = “a”;
s = s + “b”
前文我们提到过,String为典型的immutable,记住immutable要用双圈,immutable不能直接改变值,要改变存储空间:
在这里插入图片描述

(2)
String Builder sb = new String Builder(“a”);
sb.append(“b”);
String Builder为典型的mutble,并且可以直接在存储空间中改变变量的值
在这里插入图片描述

(3)final:引用不可变,要用双向箭头

在这里插入图片描述
id就是定义为了final类型
注意:
final规定只能指向这部分存储区域,但是区域中的值是可以改变的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值