软件构造系列学习笔记(3.1)—————数据类型和类型检查

本文探讨了编程中的数据类型,包括Java中的基本和对象类型,强调了类型检查的重要性,对比了静态和动态类型语言的区别。文章还讨论了不变性和可变性在软件设计中的角色,以及在使用可变类型时可能出现的问题。最后,提到了数组、集合和不可变类型的使用,以及在Java中如何处理null引用。
摘要由CSDN通过智能技术生成

数据类型和类型检查

前两章回答了:什么是“高质量的软件”、 如何从不同维度刻画软件、软件构造的基本过程和步骤。
本章主要内容是软件构造的理论基础——ADT(抽象数据类型) 和软件构造的技术基础——OOP(面向对象编程)。

目录

  • Data type in programming languages
  • Static vs. dynamic data types
  • Type checking
  • Mutability & Immutability
  • Snapshot diagram
  • Complex data types: Arrays and Collections
  • Useful immutable types
  • Null references

Data type in programming languages

Types and Variables

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

  • boolean: Truth value (true or false)
  • int: Integer (0, 1, -47)
  • double: Real number (3.14, 1.0, -2.1)
  • String: Text (“hello”, “example”)
    变量(Variables):用特定数据类型定义,可存储满足类型约束的值。形式:TYPE NAME

Types in Java

primitive types 基本数据类型,例如:

  • int (for integers like 5 and -200, but limited to the range ± 2^31, or roughly ± 2 billion)
  • long (for larger integers up to ± 2^63)
  • boolean (for true or false)
  • double (for floating-point numbers, which represent a subset of the real numbers)
  • char (for single characters like ‘A’ and ‘$’ )

object types 对象数据类型,例如:

  • String represents a sequence of characters
  • BigInteger represents an integer of arbitrary size

按照Java约定,基本类型是小写字母,而对象类型以大写字母开头。

这里写图片描述

对象类型形成层次结构

所有对象的根结点都是 Object
这里写图片描述

Boxed primitives

将基本类型包装为对象类型,例如Boolean, Integer, Short, Long, Character, Float, Double。通常是在定义集合类型的时候使用它们。一般情况下,尽量避免使用。一般可以自动转换。

Operations

操作符:执行简单计算的符号。例如+,-,*,/,=。
操作:是获取输入并生成输出的函数(有时会自行更改这些值)。
重载(Overload):同样的操作名可用于不同的数据类型 。


Static vs. dynamic data types

Java是静态类型语言 ,在编译阶段进行类型检查 ,而动态类型语言,例如Python,在运行阶段进行类型检查。

Type checking

Conversion by casting 类型转换

这里写图片描述

Static Checking and Dynamic Checking

一种语言可以提供的三种自动检查:

  • 静态类型检查:该程序甚至在运行之前自动发现该错误
  • 动态类型检查:该代码执行时会自动发现该错误
  • 无检查:该语言不会帮助您找到错误。 必须亲自检查,否则最终会得到错误的答案。

毫无疑问,静态类型检查 >> 动态 >> 无检查。

静态类型检查

静态类型检查:可在编译阶段发现错误,避免了将错误带入到运行阶段,可提高程序正确性/健壮性。具体分为以下几个错误:

  • Syntax errors(语法错误)
  • Wrong names (类名/函数名错误)
  • Wrong number of arguments (参数数目错误)
  • Wrong argument types (参数类型错误)
  • Wrong return types (返回值类型错误)
动态类型检查

在运行时检查是否有错,具体分为以下几个错误:

  • Illegal argument values (非法的参数值)
  • Unrepresentablereturn values (非法的返回值)
  • Out-of-range indexes (越界)
  • Calling a method on a null object reference(空指针)

Static vs. Dynamic Checking

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


Mutability and Immutability

改变一个变量、改变一个变量的值,二者有何区别?

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

Immutability 不变性

不变性是一个重要设计原则 。

不变数据类型(Immutable types ):一旦被创建,其值不能改变 。如果是引用类型,也可以是不变的,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值