数据类型与类型检验复习概要
程序员文章站
2022-04-10 09:55:46
Java是静态类型检测,在编译时进行类型检测,在运行时不进行类型检测。动态类型检测(针对具体的值)强于静态类型检测(针对类型)。final类无法派生子类;final变量无法改变值/引用;final方法无法被子类重写。......
- Java是静态类型检测,在编译时进行类型检测,在运行时不进行类型检测。动态类型检测(针对具体的值)强于静态类型检测(针对类型)。
- final类无法派生子类;final变量无法改变值/引用;final方法无法被子类重写。
- Snapshot diagram:描述对象在内存中的分布情况。(Run-time、Moment、Code Snapshot)
基本类型的值(存储在栈中,基本类型不存储变量名)
对象类型的值(对象的变量名存储在栈中,对象及其属性存储在堆中)
不可变对象:用双线椭圆
可变对象:用单线椭圆
不可变的引用(final修饰):用双线箭头
- 规约中没有说要对输入的变量做改变,就一定不能改变这些输入的变量。
- 规约变强:前置条件更弱(输入变多),后置条件更强(输出更少、更具体),规约图中所占面积更小。
- 写好规约:内聚,Spec描述的功能应单一、简单、易理解;信息丰富,不能让客户端产生理解的歧义。在规约里使用抽象类型,可以给方法的实现体与客户端更大的*度。
- 抽象数据型:所有属性均为private。
- 操作类型:
(1) 构造器(Creators):其它类型->当前类型
(2) 生产器(Producers):当前类型->另一个当前类型
(3) 观察器(Observers):当前类型->其它类型
(4) 变值器(Mutators):改变对象属性的方法(void方法必然为此类,此类方法不一定是void方法)。 - 不变性(Invariant):对属性的约束。表示独立性和避免表示暴露是最重要的Invariant。
- AF和RI
表示空间和抽象空间:
抽象函数AF(Abstraction Function):R和A之间映射关系的函数,即如何去解释R中的每一个值为A中的每一个值(满射,未必单射,未必双射)。
表示不变性RI(Rep Invariant):某个具体的“表示”是否是“合法的”
注意:immutable是从抽象空间的角度看的。 - 一定关于AF, RI, and Safety from Rep Exposure的典型规约:
- 多态:特殊多态(方法名多态,即方法名相同,参数不同),参数多态(如泛型),子类型多态
- 针对重写:编译阶段根据参数类型来决定一个方法能否执行,运行阶段根据参数实际指向的对象来决定具体调用哪一个方法(父类的还是哪一个子类的)。
- 由于泛型擦除,Java中不允许使用泛型数组。如:
- 从AF和Observer角度判相等:
分别从AF和Observer角度看,以下哪些是相等的:
从AF角度看,1、4相等;
从Observer角度看,1、3、4相等。 - 观察等价性:看起来一样,即Observer方法结果一样(如集合类判相等)。下面是一个出错的情况:
行为等价性:调用对象的任何方法都展示出一致的结果,对于mutable的对象行为等价性就指这两个对象是同一个对象。(mutable对象建议使用此方法,即不需要重写equals方法,直接继承即可)。
对于Immutable的对象,观察等价性和行为等价性是一样的 - Java中,-128~127的Integer对象只有一个。
例:
(1)
例子中输出true
当值不在-128~127之间时,输出false。
(2)
左边false,右边true。
本文地址:https://blog.csdn.net/qq_45110312/article/details/107235466
下一篇: 解决Python一行输出不显示的问题