HIT软件构造 数据类型、类型检查

数据类型

基本数据类型

在java中为小写字母
int long boolean double char
只有值,没有id
immutable

对象数据类型

在java中大写字母开头
String BigInteger
有id
some mutable,some not

static vs. dynamic types

静态类型语言在编译阶段进行类型检查
动态类型在运行阶段进行类型检查
Java是静态的

类型检查

静态类型检查和动态类型检查和上面是一样的道理

static checking

语法错误
类名/函数名错误
参数数目错误
参数类型错误
返回值类型错误

dynamic checking

非法参数值
非法的返回值
越界
空指针

一些例子
  1. 整数不能取代boolean
  2. int sum = 0; int n = 0; int average = sum/n;【抛出异常】
  3. double sum = 7; double n = 0; double average = sum/n;【输出infinity】
  4. int a = 5; // (1) int b; // (2) if (a > 10) { // (3) b = 2; // (4) } b *= 3; 【b可能没有初始化】

mutability and immutability

改变一个变量(该笔那指向的存储空间)、改变一个变量的值(空间不变)是不一样的
不变对象:一旦被创建,始终指向同一个值
可变对象:拥有方法可以修改自己的值

immutability

不变数据类型:一旦被创建,其值不能被改变
如果compiler不能确定final类型的变量不会改变,就提示错误,static checking
final类无法派生子类
final变量不能改变值,但是对于引用类型变量,可以改变值,但是不能指向新的内存
final方法无法被子类重写

mutability优点
  1. 使用不可变类型,对其频繁修改会产生大量的临时拷贝,需要垃圾回收
  2. 最少化拷贝提高效率
  3. 模块共享数据
immutability 优点

线程安全

defensive copy

使用new

snapshot diagram

这是code-level,run-time,moment view
用于描述程序运行时的内部状态
便于程序员之间的交流
刻画各类变量随时间的变化
解释思路

基本类型的值

在这里插入图片描述

对象类型的值

在这里插入图片描述

不可变对象

使用双线椭圆
在这里插入图片描述

可变对象

在这里插入图片描述

不可变的引用

使用双箭头
在这里插入图片描述

law

引用是不可变的,但是指向的值确是可变的(stringBuilder)
可变的引用,也可指向不可变的值(string)

复杂数据类型:Arrays and Collections

Array
List

building a list from an array:Arrays.asList(new String[] { “a”, “b”, “c” })

Set
Map
iterator is mutable

在这里插入图片描述
请看两个例子:
第一个例子是不安全的,第二个安全
在这里插入图片描述在这里插入图片描述

有用的immutable类型

  1. 基本类型及其封装类型都是不可变的
  2. Date类型是mutable
  3. 通常的collections的实现都是mutable
    但是collections有将这些类转变成不可变类型的
    Collections.unmodifiableList
    并且这种包装器得到的结果是不可变的,只能看
    在运行阶段得到,不能进行静态检查

Null references

欢迎关注公众号BBIT
让我们共同学习共同进步!

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值