一、数据类型
Java是一种强类型语言,这意味着每一个变量都必须声明一种类型。在java中,数据类型共分类两大类,即基本数据类型和引用数据类型
基本数据类型: 包括整数类型、浮点数类型、字符类型、布尔类型
引用数据类型:包括数组、 类、接口、枚举、注解等
其中基本数据类型有细分为8中类型,如下图:
1、整型
整形用于表示没有小数部分的数值,即整数数值(包含负数和0), 不受具体操作系统的影响,以保证 Java 程序的可移植性 。其存储需求及取值范围如下表
类型 | 存储需求 | 取值范围 |
int | 4个字节 | -2 147 483 648 ~ +2 147 483 647 |
long | 8个字节 | -9 223 372 036 854 775 808 ~ +9 223 372 036 854 775 8087 |
short | 2个字节 | -32 768 ~ +32 767 |
byte | 1个字节 | -128 ~ +127 |
- 其中int 最常用,byte和short主要用于特定的场合,如底层数据文件处理或需要控制占用存储空间量的大数组
- long长整型赋值时需要以"l"或"L"作为后缀
public static void main(String[] args) {
int age = 18;
long n = 80L ;
char gender='男';
byte length = 100;
}
2、浮点型
用于表示有小数部分的数值,与整数类型类似,Java 浮点类型也有固定的表数范围和字段长度,不受具体操作系统的影响。 其存储需求及取值范围如下表
类型 | 存储需求 | 取值范围 |
float | 4个字节 | 约-3.403E38 ~+3.403E38 |
double | 8个字节 | 约-1.798E308~ +1.798E308 |
- 浮点型常量的两种表示形式: –
-
- 十进制数形式。如:5.12 512.0f .512 (必须有小数点) –
- 科学计数法形式。如:5.12e2 512E2 100E-2
- float:单精度,尾数可以精确到 7 位有效数字。很多情况下,精度很难满足需求。定义 float 类型的变量,赋值时需要以"f"或"F"作为后缀
- double:双精度,精度是 float 的两倍。通常采用此类型。 。 Java 的浮点型常量默认为double 型
- 浮点类型的数据不适合在不容许舍入误差的金融计算领域(主要原因是浮点数值采用的是二进制系统表示,而二进制系统中无法精确的表示分数1/10,与十进制无法精确表示1/3)。如果需要精确数字计算或保留指定位数的精度,需要使用 BigDecimal 类
3、字符型
字符型(char)数据用来表示通常意义上"字符",占 2 字节,Java中的所有字符都使用 Unicode 编码,所以一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。
字符型变量的三种表现形式:
- 使用单引号(' ')括起来的单个字符。 例如:char c1 = 'a'; char c2 = '中'; char c3 = '9'
- 直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中, XXXX 代表一个十六进制整数。 例如:\u0023 表示 '#'
- Java 中还允许使用转义字符‘\’来将其后的字符转变为特殊字符 型常量
- 特殊字符的转义序列如下表
转义序列 | 名称 | Unicode值 | 转义序列 | 名称 | Unicode值 | |
\b | 退格 | \u0008 | \ | 双引号 | \u0022 | |
\t | 制表符 | \u0009 | \' | 单引号 | \u0027 | |
\n | 换行符 | \u000a | \\ | 反斜杠 | \u005c | |
\r | 回车 | \u000d |
要弄清楚char类型,则必须了解Unicode 编码。Unicode它打破了传统字符编码的限制,因为在此之前,在编码领域存在许多不同的标准,如美国的ASCII,西欧语言中的ISO8859-1,俄国的KOI-8已经我国的GB18030和BIG-5等。至此就产生了两个问题
- 针对任意给定的代码值,在不同的编码方案下有可能存在不同的字母
- 采用大字符集的语言其编码长度可能不同
设计Unicode 编码的初衷就是用来解决这些问题的,在设计之初认为两个字节的代码宽度足以满足世界上各种语言的所有字符进行编码,并有足够的空间留给未来扩展。在1991年发布Unicode1.0时,只占用了65536个代码值中的不到一半
在设计Java时则决定采用16位的Unicode字符集,这样在8位字符集的程序语言有了很大的进步。但是随着时间的推移,Unicode字符已经超过了65536个。由于增加了大量的汉语、日语和韩语的表意文字,现在16位的char类型已经不能满足描述所有Unicode字符的需要了
在java中,char类型用UTF-16编码描述一个代码单元。
建议:在实际的代码开发中不要使用char类型,确实需要对UTF-16的代码单元进行操作,最好将需要处理的字符串使用抽象数据类型来表示
4、布尔类型
布尔类型包括两个值 true和false,用来判定逻辑条件。整型和布尔类型之间不能进行转换。一般用于流程控制语句中 如:
- if 条件控制语句
- while 循环控制语句
- 循环控制语句
- 循环控制语句
不可以使用 0 或非 0 的整数替代 false 和 true,这点和 C 语言不同。
《java 虚拟机规范 8 版》中指出:Java 虚拟机中没有任何供 boolean 值专用的字节码指令,Java 语言表达所操作的 boolean 值,在编译之后都使用 java 虚拟机中的 int 数据类型来代替:true 用 1 表示,false 用 0 表示
5、基本数据类型变量间运算规则
在 Java 程序中,不同的基本数据类型(boolean 类型除外)变量的值经常需要进行相互转换。
转换的方式有两种:自动类型转换和强制类型转换。
自动类型转换规则:将取值范围小(或容量小)的类型自动提升为取值范围大(或容量大) 的类型
转换的场景包括:
- 把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给存储范围大的变量
- 存储范围小的数据类型与存储范围大的数据类型变量一起混合运算时, 运算结果将按照存储范围大类型来确定
- 当 byte,short,char 数据类型的变量进行算术运算时,按照 int 类型处理
强制类型转换 : 将取值范围大(或容量大)的类型强制转换成取值范围小(或容量小) 的类型。
转换格式: 数据类型(取值范围的类型) 变量名 = (数据类型-取值范围的类型)被强转数据值(取值范
围小的类型) ,如:将double类型的3.14转换为int,则需要按如下方式进行:
int i = (int)3.14 ;
当把存储范围大的值(常量值、变量的值、表达式计算的结果值)强制转 换为存储范围小的变量时,可能会损失精度或溢出
自此基本数据类型介绍完毕,对于引入数据类型将在后续的章节中逐一介绍
6、计算机存储单位
- 位(bit):是数据存储的最小单位。二进制数系统中,每个 0 或 1 就是一个位,叫做 bit (比特),其中 8 bit 就称为一个字节(Byte)。
- 字节(Byte):是计算机用于计量存储容量的基本单位,一个字节等于 8 bit
- 位与字节转换关系:
- 8 bit = 1 Byte
- 1024 Byte = 1 KB
- 1024 KB = 1 MB
- 1024 MB = 1 GB
- 1024 GB = 1 TB
二、变量
在java中,每一个变量属于一中类型,是程序的基本组成单位。它是内存中的一个存储区域, 相当于内存中一个数据存储空间的表示, 通过变量名可以访问到变量(值)
- 变量的构成包含三个要素:数据类型、变量名、存储的值
- 变量声明的格式:数据类型 变量名 = 变量值
- 变量是程序中不可或缺的组成单位,最基本的存储单元
变量的作用:用于在内存中保存数据。
变量注意事项: –
- Java 中每个变量必须先声明,后使用
- 使用变量名来访问这块区域的数据
变量的作用域:
- 定义所在的一对{ }内
- 变量只有在其作用域内才有效,出了作用域,变量不可以再被调用
- 同一个作用域内,不能定义重名的变量
三、标识符
Java 中变量、方法、类等要素命名时使用的字符序列,统称为标识符
1、标识符的命名规则
- 由 26 个英文字母大小写,0-9 ,_或 $ 组成
- 不可以使用数字开头
- 不可以使用关键字和保留字,但能包含关键字和保留字
- Java 中严格区分大小写,长度无限制
- 标识符不能包含空格。
2、标识符的命名规范
- 包名:多单词组成时所有字母都小写 如:java.lang、com.atguigu.bean
- 类名、接口名:多单词组成时,所有单词的首字母大写:
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz 例如:age,name,bookName,main,binarySearch,getName
- 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ 例如:MAX_VALUE,PI,DEFAULT_CAPACITY
注意:在定义标识符时,为了提高阅读性,要尽量有意义,达到“见名知意”的效果。
四、Java关键字
被 Java 语言赋予了特殊含义,用做专门用途的字符串(或单词)HelloWorld 案例 中,出现的关键字有 class、public 、 static 、 void 等,这些单词已经被 Java 定义好了的。
1、java官方关键字列表
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
- 关键字一共 50 个,其中 const 和 goto 是保留字(reserved word)
- true,false,null 不在其中,它们属于字面量字面量,表示特殊的布尔值和空值
2、关键字分类
序号 | 类型 | 关键字 |
1 | 定义数据类类型 | class interface void enum int double char float short byte long boolean |
2 | 修饰流程控制 | if else switch case default do while for break continue return |
3 | 修饰访问权限 | public protected private |
4 | 修饰类、变量、方法 | abstract final static synchronized |
修饰包 | package import | |
5 | 修饰类与类之前的关系 | extends implements |
6 | 修饰对象创建及对象引用 | new this super instanceof |
7 | 处理程序异常 | try catch finally throw throws |
8 | 其他修饰符 | native strictfp transient volatile assert |
9 | 保留字 | goto const |
10 | 字面量 | true,false,null |