哈工大软件构造知识点总结(3)

本文根据课程ppt整理而成,仅供参考。


目录

四、Data  Type  and  Type  Checking

1. Data type in programming languages

2. Static vs. dynamic data type checking

3. Mutability  and  Immutability

4.Snapshot  diagram as  a  cod-elevel,  run-time,  and moment  view


四、Data  Type  and  Type  Checking

1. Data type in programming languages

类型(type)是一组值,以及可以对这些值执行的操作。

变量(variables):存储特定类型值的命名位置。

2. Static vs. dynamic data type checking

Java是一种静态类型语言。所有变量的类型在编译时(在程序运行之前)都是已知的,因此编译器也可以推断出所有表达式的类型。如果 a 和 b 被声明为 int,则编译器推断a+b 也是 int类型。事实上,Eclipse 环境会在编写代码时执行此操作,因此在键入代码时可以发现许多错误。

在像 Python 这样的动态类型语言中,这种检查被推迟到运行时(当程序运行时)。

静态检查(static checking):在程序运行之前自动发现错误。(语法错误,类名、函数名错误,参数数目错误,参数类型错误,返回值类型错误)

动态检查(dynamic checking):执行代码时自动发现错误。(非法的参数值,非法的返回值,越界,空指针)

不检查(no checking):语言根本不能帮你找到错误。你必须自己去寻找,否则就会得到错误答案。

静态检查往往是关于类型,与变量具有的特定值无关的错误。静态类型保证变量将具有该集合中的一些值,但是直到运行时我们才确切知道它具有哪个值。因此,如果错误仅由某些值引起,例如除以零或索引超出范围,则编译器不会引发静态错误。相比之下,动态检查往往是关于由特定值引起的错误。

3. Mutability  and  Immutability

不变性(Immutability)是主要设计原则。

不变数据类型(Immutability):一旦被创建,其值不能改变。

Java提供了不可变的引用:赋值一次且永远不会重新赋值的变量(引用类型)。

最好使用 final 来声明方法的参数和尽可能多的局部变量,像变量的类型一样,这些声明是重要的文档,对代码的读者有用,并由编译器静态检查。注意: final类无法派生子类,final变量无法改变值/引用, final方法无法被子类重写。

不变对象:一旦被创建,始终指向同一个值/引用。

可变对象:拥有方法可以修改自己的值/引用。

4.Snapshot  diagram as  a  cod-elevel,  run-time,  and moment  view

快照图表示程序在运行时的内部状态:它的堆栈(正在进行的方法及其局部变量)和它的堆(当前存在的对象)。

使用快照图的目的:便于程序员之间的交流,便于刻画各类变量随时间变化,便于解释设计思路,便于后续更丰富的设计符号。

基元值由裸常量表示。 传入箭头是对变量或对象中的值的引用。如下图所示。

对象值是按其类型标记的圆圈。当我们想要显示更多详细信息时,我们会在其中写入字段名称,并用箭头指向它们的值。 有关更多详细信息,这些字段可以包含其声明的类型。


不可变对象(由其设计者旨在始终表示相同的值)在快照图中用双边框表示,就像图中的 String 对象一样。 

String  s  =  "a";
s  =  s  +  "b";

相比之下,StringBuilder(一个内置的Java类)是一个表示字符串的可变对象,它具有更改对象值的方法。

StringBuilder  sb  =  new  StringBuilder("a");
sb.append("b");

在快照图中,不可变的引用(final)由双箭头表示。 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值