2022 哈尔滨工业大学 软件构造 期末复习2

印象笔记转过来总是出现奇奇怪怪的格式问题……所以截图过来了;文字在下面(未转格式)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Chapter4 数据类型与类型检验1.编程语言中的数据类型类型和变量
*
类型:一组值,和值上可执行的操作;
*
变量:存储一个特定类型值的命名的地址;

java的数据类型
*
基本数据类型,int,long,boolean,double,char;
*
对象数据类型,String,BigInteger;
*
根据java惯例,基本数据类型小写,对象数据类型首字母大写;

对比:注意分配位置,结合上面一条惯例——首字母大写的变量对象数据类型堆上分配;
对象类型形成层次结构
*
由继承关系形成层次结构,子类型指向超类型;

* 

一个类,是它的所有超类的实例(继承也是创建实例)

	* 

从超类继承可见区域和方法(public,protected);
*
可以重写方法来改变行为;

2.静态 vs 动态 数据类型检查
静态vs动态类型
*
java是静态类型语言

	* 

所有变量的类型在编译时就已知,因此编译器可以推导所有表达式的类型;

		* 

e.g. 如果a,b都是int,则表达式a+b也是int;
*
IDE在写代码时就检查类型,所以写代码时就会报错;
*
动态类型的语言在runtime检查类型,比如python;

静态检查&动态检查
*
一种语言可提供三种自动检测:

	* 

静态类型检查;
*
动态类型检查
*
无检查;
*
优先级&好的程度:静态>动态>无

静态检测(类型、形式)
*
语法错误
*
类名/函数名错误
*
参数数目错误
*
参数类型错误
*
返回值类型错误

动态检测(具体值)
*
非法的参数值,比如检查除数是否为0;
*
非法的返回值,比如不能用返回值类型表示的值(字符串返回类型的函数返回数字之类);
*
越界;
*
空指针;

总之——静态检查,关于【类型】的检查,不考虑值;动态检查,关于【值】的检查;3.可变性和不可变性
赋值操作
*
使用“=”

	* 

int a; a=1;
*
可以声明&赋值:

	* 

int a=1;

改变一个变量 或 它的值
*
二者区别:

	* 

改变一个变量:该变量指向另一个值的存储空间(改变引用指向);
*
改变一个变量的值:将变量当前指向的值的存储空间中写入一个新值(改变指向的值);
*
变化是【必要之恶】;
*
尽可能避免变化;

不变性 immutability
*
重要设计原则
*
不变数据类型Immutable types,一旦被创建,其值不能被改变;
*
如果是引用类型也可以是不变的;一旦确定指向的对象就不能再被改变(和C++一样)

	* 

让引用不可变,使用关键字final声明,等同于C系列的const;
*
如果编译器无法确定final变量不改变,会提示错误(静态检查)
*
所以尽量使用final变量作为参数、局部变量;
*
note:

	* 

final类不能派生子类;
*
final变量不能改变值/引用(前面说的change的两种类型都不能=不能做改变!)
*
final方法不能被子类重写(override)
*
不变对象:一旦被创建,始终指向同一个值/引用;可变对象:可使用方法改变自己的值/引用;

String是一个不变对象类型
StringBuilder是一个可变对象类型
*
多个引用指向同一个地址时,体现不同:

两种类型的优缺点
*
不变类型安全,但修改不变类型会进行大量的内存分配和回收,性能开销大;
*
可变类型性能更好但不安全;

防御式拷贝:
*
返回一个对象的拷贝;
*
不可变类型不需要防御式拷贝;

4.内存快照图
描述程序运行时的内部状态
快照图中基本类型和对象类型的值
*
基本类型的值:箭头指向值,代表一个引用;

* 

对象类型值:

	* 

用一个带有类型名字的圈圈表示;
*
可以写出对象的值域,圈里写变量名,指向圈外它们的对应值;

* 

可变对象,单线圈;
*
不可变对象,双线圈:

* 

可变引用:单线箭头;
*
不可变引用:双线箭头;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值