数据类型与类型检验

本章主要内容:数据类型、静态\动态类型检查、可变\不可变的数据类型、Snapshot图、集合类表示复杂数据类型

数据类型

java分为基本数据类型(int、long、boolean、char、float等,小写字母开头)和对象数据类型(String、BigInteger等,大写字母开头)。

对象类型之间可以构成超类和子类的层次结构,可以将基本数据类型包装为对象数据类型,要在定义集合类型的时候使用,但会影响效率。

静态\动态类型检查(考试重点)

静态类型语言:在程序运行之前所有变量的类型已知,编译阶段进行类型检查。

动态类型语言:编写代码不指定数据类型,在运行阶段进行类型检查。

静态类型检查:语法错误、类名\函数名错误、参数数目错误、参数类型错误、返回值类型错误

检查类型,不检查值

动态类型检查:非法的参数值、非法的返回值、越界访问、空指针 检查值

两种类型的语言都会进行静态\动态类型检查,只不过动态类型语言在静态类型检查时不检查类型是否符合。

可变\不可变的数据类型

尽量使用不变性,使用final变量作为方法的输入参数和局部变量,此时无法修改值或引用。

String是不可变的,StringBuilder是可变的

当只有一个引用指向这个值时,两者没有区别,有多个引用时就会导致问题,类似于全局变量。

不可变数据类型的修改会产生大量的拷贝,降低程序的性能,会导致效率降低,但更安全。 

为使可变数据类型安全,可以采用防御性拷贝,但对其修改可能很少,会造成大量的内存浪费。

存在别名使用时,使用不可变类型为上,对两种类型的抉择是要找到效率与安全的统一。

Snapshot

用于描述程序运行时的内部状态

基本数据类型不加任何额外标识,对象数据类型加一个圈和类名,不可变类型用双线椭圆表示,不可变引用用双线箭头表示。

引用不可变值可变(final StringBuilder)引用可变值不可变(String)两种类型。

复杂数据类型

1.数组

 Array定长数组,长度不能改变,其长度是magic number,难以确定

List变长数组,List只是一个接口,只规定了定义和要实现的方法,需要有一个具体的实现形式来完成功能,这样实现了抽象定义与具体实现的分离。

2.集合

集合内元素无序的、非重复的,Set也是接口,有HashSet和SortedSet等实现方法。

3.字典:Map也是接口

注意遍历时使用的三种写法,推荐使用for循环(底层也是用迭代器实现的)。

不可变封装

在不同方法间传递不可变参数时,可以使用防御性编程或不可变封装。

无需耗费额外内存,只是进行封装,在修改时会抛出异常。

Collections.unmodifiableList
Collections.unmodifiableSet
Collections.unmodifiableMap

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值