软件构造 第三章 第一部分
? 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?用于描述程序运行时的内部状态? 便于程序员之间的交流? 便于刻画各类变量随时间变化? 便于解释设计思路? 基本类型的值: 对象类型的值: ? 不可变对象:用双线椭圆 ? ?对象值的修改:左不可变,右可变 不可变的引用:用双线箭头 引用时不可变的,但指向 的值却可以是可变的 ;可变的引用,也可指向不可变的值 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |