文章目录
第二章 基本数据类型与数组
2.1 标识符与关键字
2.1.1 标识符
- 标识符命名规则:
- 标识符由字母、下划线、美元符号和数字组成,长度不受限。
- 标志符的第一个字符不能是数字。
- 标识符不能是关键字
- 标识符不能是
true
,false
,null
。(尽管这些不是java的关键字) - Java是大小写敏感的。即
hello
,Hello
是两个不同的标识符。
- Java约定:
- 关键字、变量名、对象名、方法名、包名通常首字母小写。
- 类名首字母大写。
- 常量名全部字母均大写。
- 如果有多个单词构成标识符,则其后各个单词首字母大写(驼峰命名法).
2.1.2 Unicode字符集
Java语言使用Unicode字符集。Unicode字符集可以表示拉丁字母,汉语中的汉字,日文的片假名和平假名,朝鲜文,俄文,希腊字母以及其他许多语言中的文字。
2.1.3 关键字
关键字也叫做保留字,是具有特定用途或被赋予特定意义的一些单词。
2.1.4 分隔符
- 分隔符用于分隔不同的语法成分,不同的语法成分用不同的分隔符。
- 例如,标识符之间的分隔符为
空格
;语句之间的分隔符为;
,数据之间的分隔符为,
。
public class HelloWorld{
public static void main( String args[] ){
int i, j; //变量i , j之间使用逗号分隔
System.out.println("Hello world!" ); //两条语句之间使用分号分隔
}
}
2.2 基本数据类型
-
什么是数据类型
- 数据:是描述客观事物的数字、字符以及所有能输入到计算机中并能被计算机接受的各种符号集合。数据是计算机程序的处理对象。
- 类型:是具有相同逻辑意义的一组值的集合。如数字类型、符号类型。
- 数据类型:数据类型是指一个类型和定义在这个类型上的操作集合。数据类型定义了 数据的性质、取值范围 以及对数据所能进行的 运算和操作。
-
数据类型的分类:
Java数据的数据类型分为两大类:基本数据类型和引用数据类型。
-
基本数据类型:8
- 整数类型:byte、short、int、long
- 浮点数类型:(单精度浮点类型)float、(双精度浮点类型)double
- 字符型:char
- 布尔(逻辑)类型:boolean
-
引用数据类型:3
数组,类,接口。
简单的来说,基本数据类型中存的值代表的是数值本身,而引用数据类型中的值是引用(可以理解为地址)。
-
2.2.1 逻辑类型
- 常量:
true
、false
- 变量:使用关键字
boolean
来声明逻辑类型变量。
boolean male; /声明一个逻辑类型变量male
boolean female = true; /声明一个逻辑类型变量female,并且在声明时赋初值
boolean a1, a2, a3 = false, a4; /连续声明多个变量,并对其中的某些变量赋初值
在Java中true和false 不能表示成数字类型. 即true不能转换成1,false不能转换成0;
2.2.2 整数类型
整数类型有4
种。
①int
型
int
型在任何操作系统中都为32
位,这体现了java
的平台无关性。
- 常量:
二进制表示:
0b111
(用0b
或0B
作为前缀)
八进制表示:077
(用数字0作为前缀)
十进制表示:123(不需要前缀)
十六进制表示:0x3ABC(用0x
或0X
作为前缀)
- 变量:
使用int
来声明变量,也可在声明是同时赋初值。
int x = 12, y = 0x78ab, z = 0b011;
②byte
型
在java中不存在byte型常量表示法。因为(不加修饰的)整数和小数默认是int
型和double
型。
- 变量:使用关键字
byte
声明
byte = 28 , 漂亮 = 98
。
也可以让汉字作为变量。
③short
型
在java中不存在short型常量表示法。与byte型相同。
- 变量:使用关键字
short
声明
short a =20
④long
型
- 常量:
long型常量用后缀
L
表示。例如:108L(十进制)、07123L(八进制)
- 变量:使用关键字
long
声明。
2.2.3 字符类型
-
字符类型表示(Unicode)字符,一个字符占用16位。
-
字符常量的两种表示法:
- 一种是用单引号将Unicode字符集中的字符括起来。
- 另一种用Unicode值表示。
'\u'+(十六进制的值)
。
\u0061 \表示小写字母a 'a'
有些字符不能通过键盘输入到字符串或程序中。
\n(换行),\b(退格),\t(水平制表符),\'(单引号),\"(双引号),\\(反斜线)
其中
\
被称作转义字符。 -
小技巧
如果我们想知道一个字符处于Unicode字符集中的位置,可以将其转换成
int
型后输出。例如,字符'a'
,int tmp_var = (int)'a'
。打印tmp_var
便可以直到字符'a'
的位置。如果我们想知道一个
0~65535
的数所代表的的Unicode字符,那么可以将其转换成char
类型后输出。
2.2.4 浮点数类型
①float
型:在存储float
型数据时保留8位有效数字。
- 常量:
小数表示法:453.5439f、21379.987F
指数表示法:2e40f。(2乘10的40次方)
- 变量:使用
float
关键字声明。
②double
型:在存储double
型数据时保留16位有效数字。
- 常量:
小数表示法:2389.539d、20.3654D
指数表示法:与float一致
- 变量:使用
double
关键字声明
2.3 类型转换运算
- 当把级别(精度)低的变量的值赋给级别高的变量时,系统自动完成数据类型的转换。
- 当把级别(精度)高的变量的值赋给级别低的变量时,必须使用类型转换运算。否则会报错。
- java中7种基本数据类型的精度从低到高排序(不包括布尔类型):
byte-> short-> char-> int-> long-> float-> double
注意:第二条规则对char
类型不适用。当字符类型的变量与数字类型的变量进行运算时,会自动被转换成其所对应的Unicode
码(十进制)。
2.4 输入与输出数据
2.4.1 输入基本型数据
在使用Scanner
类前,需要在程序头部导入该类,使用import java.util.Scanner;
使用Scanner
类创建一个对象。
Scanner reader = new Scanner(System.in);
构造出的reader
对象有以下方法:
nextBoolean();nextByte();nextShort();nextInt();nextLong();nextFloat();nextDouble()
- 分隔标记:
reader
对象用空白
作为分隔标记。以上所述的方法,每次读取终端输入的一个值,由于这些方法以空格
作为分隔标记,当我们只要输入一个值时,该值中间不能出现空格,否则会被当做输入了两个值。如果在输入数据中出现了空格,说明我们输入了两个数据,这两个数据需要两个reader
对象的方法接收。 - 堵塞状态:略
2.4.2 输出基本型数据
System.out.println()
和System.out.print()
可以输出串值、表达式的值。两者的区别是前者输出数据后会换行,后者不会。
Java允许使用并置符号+
将变量、表达式或者一个常数值与一个字符串并置在一起输出。
System.out.printf()
可以格式化输出。
语法如下:
System.out.printf("格式控制部分", 表达式1,表达式2,...)
示例:System.out.printf("这儿有两个数:%d, %f", 12, 23.56)
。%d:输出int型数据; %c:输出char型数据; %f:输出浮点型数据,小数部分最多保留6位; %s:输出字符串数据; %md:输出的int型数据占m列; %m.nf:输出的浮点型数据占m列,小数部分保留n位;
2.5 数组
2.5.1 声明数组
数组的元素类型 数组名[];
数组的元素类型[] 数组名;
int array_name[];
int[] array_name;
①在Java计中声明数组是不能指定其长度的。
int a[5]; //错误错误(X)
②Java数组两种初始化方式。
- 数组变量的初始化
静态初始化
int a[] = {1, 2, 3}
动态初始化
int a[]; a = new int[5];
2.5.2 访问数组元素
访问数组元素使用下标索引的方式,即:数组名[元素下标]
int a[] = new int[5];
int b = a[0] \\使用下标访问数组a的第一个元素
这里,new int [5]
表示为数组a
分配了5个int
型变量的空间。在大部分计算机语言中,数组下标都是从0
开始,所以这里的可访问下标范围是0~4
。当下标不在这个范围内时,会触发异常。
2.5.3 数组的长度
数组.length
a.length
;//此处的前提是数组已初始化。
int a[];//为数组变量分配地址空间,未分配存储空间
a = new int[5]; //分配了存储空间
int number = a.length //使用number存储数组a的长度
2.5.4 数组的引用
数组属于引用型变量,因此两个相同类型的数组如果具有相同的引用,它们就有完全相同的元素。
对于基本数据类型,我们声明的变量存储在被称为栈
的存储空间中,对于引用数据类型变量,它们的值也存在栈
中,但是,对于引用型变量,它们的值一般不是单纯的数字,而是引用((地址),一种带有指向性的数据),通过这个引用,我们可以访问到一块空间中存储的数据。
int a[]; //声明一个数组类型的变量a
对于这段语句,内存模型如下:
//承接上一条语句 a = new int[3]; //为数组a分配3个int型变量的空间
这段语句对应的内存模型如下:
对于
new
关键字,它会帮我们申请内存空间,同时返回分配空间的首元素引用(地址)。
- 对于静态初始化,
int a[] = {1, 2, 3}
。分配三个int
型变量的空间,并且将这三个int
型变量空间初始化,最后返回首元素引用(地址)。
int var1[] = {1, 2, 3}; int var2[] = {4, 5, 6};
var2 = var1;
2.5.3 如何提前删除数组空间
Java中没有delete
语句,new
出来的空间,如果没有任何变量引向它,虚拟机则可以对其进行内存回收。
不一定会立即删除,虚拟机可以进行该区域的内存回收,但具体时间由虚拟机的自己决定,无法完全由程序控制
参考资料
[1] 耿祥义,张跃平.Java2 实用教程(第6版)[M].北京:清华大学出版社,2021