在软件构造第四章,我们学习了Java中的数据类型以及数据类型检查,我想通过总结来对知识加深印象。
数据类型:
1基本数据类型:
基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型。它们是我们编程中使用最频繁的类型。java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为变量的初始化。Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。
2对象数据类型:
对象数据类型是Java区别于C语言的不同之一,在定义时,基本数据类型由小写字母定义,而对象数据类型由首字母大写定义。对象可以在其中定义很多方法。StringBuilder、Map、List<L>等都是对象数据类型。
二者的区别:
在Java中,基本数据类型可以被包装为对象数据类型,例如int可以被包装为Integer,char可以被包装为Character,但一般情况下,包装后会降低性能,所以尽量避免使用。
语言类型:
静态类型语言:
静态类型语言的类型检查是在运行前的编译阶段,比如 C#、Java 等都是静态类型语言,静态类型语言为了达到多态会采取一些类型鉴别手段,如继承、接口,而动态类型语言却不需要,所以,一般动态语言都会采用 dynamic typing。静态类型语言常出现于编译语言中,比如,Java,实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制。
动态类型语言:
所谓动态类型语言,就是类型的检查是在运行时才做。
类型对于变量,属性,方法以及方法的返回类型都是可有可无的,在给变量赋值时才决定它的类型, 之后,还可以赋值不同类型的值,即使是基本类型,可以把值类型转换成引用类型,引用类型转换成值类型。当需要时,很多类型之间都会发生自动转换,可以把不同的基本类型添加到同一数组(collections)中。
检查类型:
静态检查:
静态检查:可在编译阶段发现错误,避免了将错误带入到运行阶段,可提高程序正确性/健壮性。主要检查语法错误、类名/函数名错误、参数数目错误、返回值类型错误。
动态检查:
在执行过程中的检查,主要检查非法的参数值、非法的返回值、数组越界、或者空指针等问题。
区别:
静态检查:关于“类型”的检查,不考虑值 动态检查:关于“值”的检查。
可变与不可变:
不可变数据类型:
不可变数据类型是指一旦被创建,其值就不能改变的数据类型;如果是引用类型,也可以是不变的:一旦确定所引用的对象,就不能改变指向其它对象,为了让一个引用不变,可以在前面加入final,编译器进行静态类型检查的时候,如果判断final变量首次赋值后发生了改变,会提示错误。
可变数据类型:
数据类型中的值可以改变的类型成为可变数据类型,可变类型因为最少化拷贝,可以提高效率,使用可变数据类型,可以获得更好的性能,也适合于在多个模块之间共享数据。
Java中所有的基本数据类型都是不可变数据类型,而对象数据类型中既有不可变数据类型也有可变数据类型。
通过不可变包装器,我们可以将一个可变数据类型包装为一个不可变数据类型,一些包装器如下:

参考文献: