【基本内容】
通常,在Java中数据类型分为基本数据类型和引用数据类型,基本数据类型直接存储值副本在栈内存中,引用数据类型则只是把它的内存地址即引用存储在栈内存中,其内容即实例化后的对象则存储在堆内存中,这是两者的本质区别。引用数据类型和基本数据类型的主要区别如下表:
引用数据类型及其面向对象的特性是Java编程语言的核心,构成了Java面向对象编程的基础。在Java中引用数据类型大致可以分为类、接口、数组、枚举四种,其中类是引用数据类型的基础,和其实例化后的对象,一起构成了Java面向对象的两大核心概念。下表是四种引用数据类型的简要说明:
Java中最常见的引用数据类型就是String类,此外还有集合框架相关的接口和类等等;前面提到的八种基本数据类型在Java中都有对应的包装类,分别是Byte、Short、Integer、Long、Float、Double、Character、Boolean。
【注意事项】
1.枚举类的特殊性:枚举类在Java应用开发中被广泛使用,但是它的本质很容易被同学们忽略,所以这里特别再说明一下。枚举本质上是使用enum关键字定义的一种特性的类,它具有以下特征:
下面的代码展示了枚举类中定义抽象方法的逻辑,大家参考一下:
enum Color {
RED{
public String getColor(){
return "red";
}
},
GREEN{
public String getColor(){
return "green";
}
},
BLUE{
public String getColor(){
return "blue";
}
};
public abstract String getColor();
}
2.注解的本质:在Java中,Java注解很容易被理解为一种特殊的类, 理由有以下几点:a.它可以像类那样被单独定义;b.使用时虽然依附在不同的类、属性和方法上,但是同一个注解,在不同的类、属性和方法上的属性值是不同的,这很像类和对象的关系,说明它有多个实例;c.它可以通过反射获取到具体的注解属性值,并且还有class属性。那注解能不能作为一种特殊类并归属为一种引用数据类型呢?实际上注解被设计出现的目的是作为一种元数据机制,用于提供关于代码的附件信息,以此增强代码的功能性和可维护性;注解属性值是作为宿主类元数据的一部分存储在宿主类class文件中, 在运行时虽然可以通过反射获取,但这时获取的并不是注解的实例对象,也不涉及内存分配,获取的只是作为宿主类元数据一部分的注解属性值的静态数据,所以注解至少不能作为一种引用数据类型,但可以理解为其实现是以一种特殊的类为载体的。
3.泛型是不是数据类型:泛型本质上是类型参数化,也是一种占位符元数据,没有实际的定义,也不对应具体的类型,在编译期会被替换为具体的类型,在运行期也不再存在,因而不是一种数据类型:但是泛型的不确定性和参数化,增强了编码的灵活性和可复用性,同时还能避免类型强制转换带来的异常。
关注码农爱刷题,看更多文章!