软件构造(四)

一、编程语言中的数据类型

1.1基本数据类型:int long boolean double char short byte float

都是不可变数据类型、只有值没有ID(无法与其他值区分) 在栈中分配内存

1.2对象数据类型:Classes interfaces arrays

有时是可变有时不可变、既有ID也有值、 在堆中分配内存

1.3对象类型形成层次结构

extends(继承关系)

1.4将基本数据类型包装成对象类型

Integer、Boolean…(仍是不可变的,一般可以进行自动转换)

 

二、静态类型和动态类型

静态类型语言(Java)在编译时进行类型检查,动态类型语言(Python)在运行时进行类型检查

 

三、类型检查

3.1例子:

int a = 2; a = 2(正常赋值)

double a = 2; a = 2.0 (Implicit)(int在赋值时被转换为double )

int a = 18.7; ERROR(类型不匹配)

String a = 1; ERROR(类型不匹配)

int a = (int) 18.7; a = 18(进行强制类型转换是舍去小数)

double a = 2/3; a = 0.0(2与3是int导致他们相除为0)

double a = (double)2/3; a = 0.6666…(2强制转换为double)

 

3.2检查内容:

Syntax errors 语法错误

Wrong names 类名/函数名错误

Wrong number of arguments 参数数目错误

Wrong argument types 参数类型错误

Wrong return types 返回值类型错误

Illegal argument values 非法的参数值

Unrepresentable return values 非法的返回值

Out-of-range indexes 越界

Calling a method on a null object reference 空指针

 

3.3分类

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

动态检查:关于“值”的检查

 

四、可变数据类型和不可变数据类型

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

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

1 final:

final类无法派生子类

final变量无法改变值/引用

final方法无法被子类重写

 

2

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

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

例如,String是不可变对象。改变了String的值后,JVM会申请新的内存,并将这个变量指向这个区域

安全的使用可变类型:局部变量,不会涉及共享;只有一个引用,如果有多个引用(别名),使用可变类型就非常不安全

 

五、Snapshot diagram as a code-level, run-time, and moment view

Moment Period

Build-time design,build,refactoring Version Control

Run-time Code snapshot,heap dump Thread and Process

 

5.1 Snapshot diagrams

用于描述程序运行时的内部状态、便于程序员之间的交流、便于刻画各类变量随时间变化、便于解释设计思路

 

5.2 变量类型的图示

单箭头:表示一个基本数据类型的值

单线圆圈:表示一个对象(可以细化对象内部的变量)

双线椭圆:表示不可变的对象

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

引用是不可变的,但指向的值却可以是可变的(final StringBuilder s)

可变的引用,也可指向不可变的值(String s)

 

六、复杂数据类型

Arrays and Collections

List Set Map

可以使用迭代器进行迭代,使用remove时要注意

 

七、有用的不可变数据类型

可利用Collections.unmodifiableList将一个可变的List、Set、Map包装成不可变的类型

List.of() Set.of() Map.of()也可进行不可变的包装。

 

八、空引用

空引用只能应用在对象上,基本数据类型上使用会报错。

 

心得感想:数据类型的可变不可变更多的是取决于程序员的需要以及信息安全方面的考虑,是一种很好的防范外部对内部数据安全进行破坏的方式,同时也一定意义上时时刻刻约束着程序员,规范编程时的行为。

posted @   llhm  阅读(144)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示