数据类型和类型检验

1)数据类型
在Java中数据类型分为两类,分别是基本数据类型和对象数据类型。基本数据类型包括int long float等,有一定编程经验的都会了解;对象数据类型包括String、Integer等。特点是具有继承关系。

二者的具体区别如下图:

可以将基本类型包装为对象类型,但是会降低性能。通常只有遇到<>才会使用,多数情况也会自动转换。

2)静态/动态类型检查 
首先要知道的是,Java是一门静态语言,类似于C语言,动态语言的典型代表是Python。

简单来讲,静态和动态的区别就是检查出bug的时间是在程序运行前还是运行后。

静态检查往往检查的是:

1.语法错误,例如多余的标点符号成者错误的关链词,即使在动态类利的语合例如Puthon中也会做汶种检查。

2.错误的名字

3.参数错误

4.错误的返回类型

动态检查往往检查的是:

1.非法的变量值,例如整形变量xy,表达式x/y只有当y=0是才会出错,否期就是正确的。

2.无法表示的返回值。例如最后得到的返回值无法用声明的类型来表示。

3.越界访问,例如在一个字符串中使用一个负数索引

4.使用一个null对象解引用

总结起来就是:静态检查是关于“类型”的检查,不考虑值 ;动态检查是关于“值”的检查

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

可以使用final来修饰一个对象,这样对象的引用不可以改变,但引用的对象内部可以改变。若用来修饰一个基础数据类型,则初始化之后不可再赋值。

此外,final类无法派生子,final变量无法改变值/引用 ,final方法无法被子类重写。

常见的如String、Integer等。

可变类型:简单来讲就是如ArrayList等可以改变其引用/值的类型。

1.对于不可变类型,由于不可改变值或引用,每次想要更改值或值的时候,就需要做大量的临时拷贝,造成内存和时间的浪费。而可变类型因为最少化拷贝,可以提高效率。

2.更重要的一点,不可变类型有很好的优点就是比起可变类型更安全。举例,如果返回的是可变类型,一旦在后续处理中发生了不期望的更改,这种错误是非常难以检查的。这就要求我们使用可变类型时要注意,可以使用防御式拷贝、对于容器类数据类型可以使用如Collections.unmodifiableList等方法将其转变为不可变、final修饰等措施。

4)快照图
快照图是一种方便且直观的用来描述程序运行时的内部状态等图,画快照图有如下规则:

1.基本类型的使用箭头表示

2.对象数据类型使用椭圆表示 

3. 不可变对象:用双线椭圆 

4. 不可变的引用:用双线箭头;引用是不可变的,但指向的值却可以是可变的 ;可变的引用,也可指向不可变的值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值