加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

软件构造 第三章 第一部分

发布时间:2020-12-14 04:43:50 所属栏目:大数据 来源:网络整理
导读:? 3.1 数据类型与类型检验 一、数据类型 数据类型分为以下两种: 基本数据类型:int、long、boolean、double、char 对象数据类型:String、BigInteger等 他们的区别如下图: ? 二、静态、动态检查 静态类型:在编译阶段进行类型检查,可在编译阶段发现错误,

?

3.1 数据类型与类型检验

一、数据类型

数据类型分为以下两种:

基本数据类型:int、long、boolean、double、char

对象数据类型:String、BigInteger等

他们的区别如下图:

?

二、静态、动态检查

静态类型:在编译阶段进行类型检查,可在编译阶段发现错误,避 免了将错误带入到运行阶段,可提高程序正 确性/健壮性

包括:语法错误,?类名/函数名错误,??参数数目错误,返回值类型错误

例如:int a = 18.7 //error,String a = 1; //error等等

动态类型:在运行阶段进行类型检查

包括:非法的参数值.?非法的返回值,?越界,??空指针

找bug的时机:静态类型检查>>动态>>无检查

静态检查:关于“类型”的检查,不考虑值 动态检查:关于“值”的检查

?

三、可变性与不可变性

1)赋值:通过”=“给变量赋值

2)改变一个变量与改变一个变量的值的区别:

改变一个变量:将该变 量指向另一个值的存储空间

改变一个变量的值:将 该变量当前指向的值的存储空间中写入一个新的值。?

3)不变性:

不变数据类型:一旦被创建,其值不能改变。如果是引用类型,也可以是不变的:一旦确定其指向的对象,不能在被改变。

?

关于final

1.修饰类当用final去修饰一个类的时候,表示这个类不能被继承。注意:a. 被final修饰的类,final类中的成员变量可以根据自己的实际需要设计为fianl。b. final类中的成员方法都会被隐式的指定为final方法。

2.修饰方法

?

被final修饰的方法不能被重写。

?

注意:

?

a. 一个类的private方法会隐式的被指定为final方法。

?

b. 如果父类中有final修饰的方法,那么子类不能去重写。

3.修饰成员变量:

注意:

a.必须要赋初始值,而且是只能初始化一次。

b.被final修饰的成员变量赋值,有两种方式:1、直接赋值 2、全部在构造方法中赋初值

c.如果修饰的成员变量是基本类型,则表示这个的值不能再修改。

d.如果修饰的成员变量是一个引用类型,那么这个引用的地址不能修改,但是所指向的对象里面的内容还是可以更改的。

例如String是不可变的数据类型,

?

在上面的例子中,s添加了b,s指向了一个新对象。

当有多个引用时,就会产生区别,例如下图

使用不可变类型,频繁修改会产生大量的临时拷贝。但是更”安全“

使用可变数据类型,可获得更好的性能,也适合在多个模块之间共享数据

例如下面这个例子,由于list可变。导致调用sumAbsolute时将list的值全部改为正数,两个输出结果都变为10。

?

防御性拷贝:

下面的程序会对groundHogAnswer的month修改,导致错误,使用防御性拷贝,

return new Date(groundhogAnswer.getTime());

通过防御式拷贝,给客户端返回一个全新的Date对象?

?

四、Snapshot diagram?用于描述程序运行时的内部状态?

便于程序员之间的交流?

便于刻画各类变量随时间变化?

便于解释设计思路?

基本类型的值:

对象类型的值:

?

不可变对象:用双线椭圆

?

?对象值的修改:左不可变,右可变

不可变的引用:用双线箭头

引用时不可变的,但指向 的值却可以是可变的 ;可变的引用,也可指向不可变的值

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读