软件构造第三章——ADT设计数据类型

一.数据类型

正如老师所说,编程比作写文章的时候,数据就是里面的名词。但我觉得这么比喻有点儿不充分,我觉得文章本身就是一种数据类型,尤其像JAVA面向对象来说,把数据,操作,代码绑定的十分紧密。在现实生活中很难找到一个概念与现在我们要探讨的数据相区分,不如说这个概念就是现实世界本身。
我们定义数据类型就是一组值和其上能进行的操作。
而变量就是空间,可存储满足约束的值。
JAVA类型包括基本类型和引用类型两种

基本类型引用类型
StackHeap
不可变可变,不可变
有值有值有ID
价格低价格昂贵

基本类型允许使用包装类包装为对象类型。

二.静态/动态检查

静态检查:发生在编译阶段,编译器推断类型。
是“类型”检查
其中,调用方法名错误,参数,返回值类型错误,语法错误,都是静态类型检查。

动态检查:发生在运行阶段。
是“值”检查
其中,除零错,数组越界都是动态检查。
静态检查更能避免BUG把BUG留在编译阶段。

四.可变与不可变

可变与不可变是使用数据类型时类型的属性。
也是我们设计ADT时的设计决策。
1.可变类型允许修改值。
2.不可变类型一旦创建不允许修改。
注意改变变量与改变变量的值是不同的。
我是这么理解的.我们的对象变量是new出来的,而引用只是一个指向。
改变变量是改变了引用,而我new出来的对象没有变。
改变变量的值就是改变我new的对象。
而基本类型不可变int a = 1;
这个1才是我的数据,我不能把1变成2但我可以把a指向2.

final关键字
final表示我的一种设计决策
final引用:不可改变的引用,虽然我们不能改变对象的引用,但是我们仍旧可以改变属性。
集合类同理
final类:不可派生的类
final方法:不可override的方法。

典型的不可变对象string

String a = new String("a");
String b=a;
a = a.concat("b");
System.out.println(a); //ab
System.out.println(b); //a

a的方法创建一个新对象

而StringBuilder就是一个可变

StringBuilder a = new StringBuilder ("a");
StringBuilder b=a;
a = a.concat("b");
System.out.println(a); //ab
System.out.println(b); //ab

五.为什么要区分可变与不可变

可变的优点:
1.不用创建大量拷贝,节约空间。
2.性能更好
3,共享数据
不可变优点:
安全和其他的性能
可变类型给出数据有表示泄露的危险,客户端可以轻易修改你的数据。
防范:防御拷贝,对于所有给出内部可变类型的方法,给出一份副本。
不如直接用不可变类型。

六,代码快照

反映了运行某一时刻的各变量或对象的状态以及变化情况; 其中箭头代表引用, 由变量名指向引用地址.

用单箭头表示可变引用,用双箭头表示不可变引用,
用单椭圆表示可变对象,用双椭圆表示不可变对象,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值