前言
Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。本文将详细的介绍各类型。
Java的数据类型
Java的数据类型主要分为两部分:基本数据类型、引用类型。如下图:
mindmap
Java数据类型
基本数据类型
数值型
short
int
long
浮点型
float
布尔型
double
字节型
byte
boolean
字符型
char
主要引用类型
类
接口
数组
枚举
注解
基本类型具体信息表:
类型 | 类型名称 | 关键字 | 占用内存 | 作为成员变量默认值 | 包装器类型 |
---|---|---|---|---|---|
整形 | 字节型 | byte | 1字节 | 0 | Byte |
短整型 | short | 2字节 | 0 | Short | |
整型 | int | 4字节 | 0 | Integer | |
长整型 | long | 8字节 | 0L | Long | |
浮点型 | 单精度浮点型 | float | 4字节 | 0.0F | Float |
双精度浮点型 | double | 8字节 | 0.0D | Double | |
字符型 | 字符型 | char | 2字节 | '\u0000' | Character |
布尔型 | 布尔型 | boolean | 1字节 | false | Boolean |
1、基本数据类型
byte类型
byte:8位整型,最大存储数据量是255,存储数据的范围是-128~127之间
看到这里,大家可能就疑惑了
1、为什么是8位整型?:
byte类型占用内存为1字节,1字节(byte)=8位(bit) , 一个字节等于二进制位的八位
2、为什么byte的范围是-128 ~ 127而不是-128 ~ 128呢?原因是对于二进制编码来讲,最高位位0,则表示正数;最高位为1,则表示负数。以8位的二进制位为例:
8位二进制最大正整数为:0111 1111 —— 127(十进制)
8位二进制最小负整数为:1000 0000 —— -128(取反后加一)
short
short:16位整型,最大存储数据量是65535,存储数据的范围是-32768~32767之间。
int类型
int:32位整型,最大存储数据量是4294967295,存储数据的范围是-2^31~2^31-1之间。
long
long:64位整型,最大存储数据量是2^64-1,存储数据的范围是-2^32~2^32-1之间。
float类型
float:32位浮点型,存储数据的范围是3.4e-45~1.4e38,在进行数据存储时,必须在后面追加F或f。
double
double:64位浮点型,存储数据的范围是4.9e-324~1.8e308,在进行数据存储时,在后面追加D或d,也可不加。
char
char:16位字节型,用于Unicode码,进行赋值时需要使用''。且一次只能定义一个字符。
boolean
boolean:波尔型,波尔行最大的特点是他只有两个值:true、false。其中,true代表真,false代表假。
2、引用数据类型
引用数据类型:非常多,大致包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型。
简单来说,所有的非基本数据类型都是引用数据类型。
Class(类)
在Java语言中一切都是对象,那么是什么决定了某一类对象的外观与行为呢?换句话说,是什么确定了对象的类型?
于是java提供了关键字class,用于声明类
/**
* 定义一个人 的类
*/
public class Person {
/**
* 姓名
*/
String name;
/**
* 年龄
*/
int age;
Person(String name, int age){
this.name = name;
this.age = age;
};
public static void main(String[] args) {
Person p1 = new Person("小明",20);
Person p2 = new Person("小红",19);
}
}
Array(数组)
数组 是一种容器,可以同时存放多个相同数据类型的数据
数组是一种引用类型,其长度在程序运行期间不可以改变
数组和其他容器之间的区别在三方面:效率、类型、保存基本类型的能力
例举几种数组定义方式
public static void main(String[] args) {
// 方式一: 定义一个长度为3的数组,并初始化
int[] array01 = {1,2,3};
// 方式二: 定义一个长度为0的空数组
int[] array02 = new int[]{};
// 方式三: 定义一个长度为1的数组
int[] array03 = new int[1];
array03[0] = 10;
System.out.println(array01.length);
System.out.println(array02.length);
System.out.println(array03.length);
}
interface(接口)
使用interface关键字来定义接口。编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
一个接口表示: "所有实现了该特定接口的类看起来都像这样"
- 接口与类的区别:
- 接口不能用于实例化对象。
- 接口没有构造方法。
- 接口中所有的方法必须是抽象方法。
- 接口不能包含成员变量,除了 static 和 final 变量。
- 接口需要被类实现。当要实现一个接口时,在接口中被定义的的方法必须被定义为是public的
- 接口支持多继承。
public interface AnimalService {
/**
* 吃
*/
void eat();
}
public class AnimalServiceImpl implements AnimalService {
@Override
public void eat() {
System.out.println("吃草");
}
}
enum(枚举)
关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规程序组件使用。
Java枚举类型本质上 是一种继承java.lang.Enum类
定义一个简单的枚举类:
public enum RequestStatusEnum {
SUCCESS("0", "success");
private final String code;
private final String message;
RequestStatusEnum(String code, String message) {
this.code = code;
this.message = message;
}
public String getCode() {
return this.code;
}
public String getMessage() {
return this.message;
}
}
注解
注解类型也属于一种Java类型,它用“@interface”关键字来声明。与其他任何java接口一样,注解也将会编译成class文件。
定义一个简单的注解:
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Documented
// 定义注解长哪个级别可用
@Retention(RUNTIME)
// 定义注解用在什么地方
@Target({METHOD, TYPE})
public @interface AspectPoint {
}