3.2标识符和关键字
3.2.1 分隔符
- 分号:实现对语句的分隔,每个Java语句都会使用分号作为语句的间隔,因此每个Java语句必须使用分号作为结尾,Java程序允许一行书写多个语句,也可以一个语句跨多行。
- 花括号:定义一个代码块,代码块在逻辑上是一个整体,对Java语言而言,类定义部分必须放在一个代码块里,方法部分也必须放在一个代码块里,除此之外,条件语句的条件执行体和循环语句中的循环体也必须放在花括号里。
- 方括号:访问数组元素,方括号通常紧跟数组变量名,而方括号里指定希望访问的数组元素的索引。
- 圆括号:定义方法时必须使用圆括号来包含所有的形参声明,调用方法时也必须使用圆括号来传入实参值,不仅如此,圆括号还可以将表达式中某个部分扩成一个整体,保证这部分优先计算,除此之外,圆括号还可以作为强制类型转换的运算符。
- 空格:作为分隔一条语句的不同部分
- 圆点:通常作为类/对象和它的成员(包括成员变量、方法和内部类)之间的分隔符,表明调用某个类或者某个实例的指定成员。
3.2.2 Java9的标识符规则
标识符就是给程序中变量、类、方法命名的符号。Java语言的标识符必须以字母、下划线和美元符开头,后面还可以跟任意数目的字母、数字、下划线和美元符。
Java9规定:不允许使用单独的下划线作为标识符,即下划线必须和其他字符组合在一起才能作为标识符。
- 标识符可以由字母、数字、下划线和美元符组成,其中数字不能打头。
- 标识符不能是Java关键字和保留字,但可以包含关键字和保留字
- 不能包含空格
- 只能包含美元符,不能包含@、#等其他特殊字符
3.2.3 Java关键字
- Java所有的关键字都是小写的
- Java一共包含50个关键字
3.3 数据类型分类
Java语言是强类型语言,强类型包含两方面的含义:
- 所有变量必须先声明,再使用
- 指定类型的变量只能接受类型与之匹配的值
类型限制一个变量能被赋的值,限制了一个表达式可以产生的值,限制了在这个值上的可以进行的操作,并确定了这些操作的含义。
程序对变量赋值,实际上就是把数据装入该变量所代表内存区的过程,程序读取变量的值,实际上就是从该变量所代表的内存区取值的过程。
定义变量时,既可以指定初始值,也可以不指定初始值,随着变量的作用范围的不同,变量还可以使用其他修饰符。但是不管是哪种类型,必须指明变量类型和变量名。
Java语言支持的类型分为两类:基本类型和引用类型
- 基本类型:boolean类型和数值类型(整数类型和浮点类型)
- 引用类型(对一个对象的引用,对象包括实例和数组两种):类、数组和接口类型,null类型没有名称,所以不可能声明一个null类型的变量或者转换到null类型,空引用是null类型变量唯一的值,空引用可以转换为任何引用类型。
3.4 基本数据类型
- boolean类型
-
数值类型
3.4.1 整型
- byte:字节
- short:两个字节
- int:整型
- long:长整型
Java中整数值有4种表达方式:十进制、二进制、八进制和十六进制。
当定义32位的二进制整数时,最高位其实是符号位,当符号位为1时,表明它是一个负数,负数在计算机里是以补码的形式存在的,因此还需要换算为原码。
所有数字在计算机底层都是以二进制的形式存在的,原码是直接将一个数值换算为二进制数,但计算机以补码的形式存储所有的整数。补码的计算规则:整数的补码和原码完全相同,负数的补码是其反码+1, 反码是对原码按位取反,只有最高位(符号位)保持不变。
3.4.2 字符型
字符型通常用于表示单个的字符,字符值必须使用单引号括起来。
对于保存电影、音乐等,首先将其转换为二进制码才能保存,但对于字符型的保存,只需要将其编号保存为二进制码然后保存。
字符型值有如下三种表示形式:
- 直接指定字符型值
- 转义
- Unicode值表示字符型值
char类型的变量、值完全可以参与加减乘除等数学运算,也可以比较大小,实际上都是用该字符对应的编码进行运算。
Java没有提供字符串的基本数据类型,而是通过String类来表示字符串,由于字符串由多个字符组成,因此字符串要用双引号括起来。
注意:
char类型使用单引号括起来,而字符串应该使用双引号括起来。
3.4.3 浮点型
- float:第一位是符号位,接下来8位表示指数,再接下来的23位表示尾数
- double:第一位是符号位,接下来的11位表示指数,再接下来的52位表示尾数
Java语言的浮点数有两种表现形式:
- 十进制形式
- 科学计数法形式
Java还提供了三个特殊的浮点数值:正无穷大、负无穷大和非数,用于表示溢出和出错。POSITIVE_INFINITY, NEGATIVE_INFINITY, NaN
必须指出的是:所有的正无穷大数值都是相等的,所有的负无穷大值都是相等的,而NaN不予任何数值相等,甚至和NaN都不相等。
注意:
只有浮点数除以0才可以得到正无穷大和负无穷大,如果一个整数除以0,则会抛出一个异常。
3.4.4 数值中使用下划线分隔
使用下划线分隔,可以更直观的分辨数值中到底包含多少位。
3.4.5 布尔型
在Java语言中,boolean类型的数值只能是true或false,不能用0或者非0来表示,其他数据基本类型也不能转换为boolean类型。
如果使用一个boolean类型的值和字符串进行连接运算,则boolean类型的值将会自动转换为字符串。
Java语言中使用boolean类型的变量或值控制的流程主要包括:
- if条件控制语句
- while循环控制语句
- do while循环控制语句
- for循环控制语句
3.5 基本类型的类型转换
Java语言提供了7种数值类型之间都可以相互转换,有两种类型转换方式:自动类型转换和强制类型转换。
3.5.1 自动类型转换
Java所有的数值类型都可以相互转换,如果系统支持把某种基本类型的值直接赋给另一种基本类型的变量,这种方式被称为自动类型转换。当把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统将可以进行自动类型转换,否则需要强制转换。
- int类型可以自动转换为float类型
- byte类型不能自动转换为char类型,但是可以自动转换为double类型
不仅如此,当把任何基本类型的值和字符串值进行连接运算时,基本类型的值将会自动转换为字符串类型,虽然字符串尅性不是基本类型,而是引用类型。因此,如果希望把基本类型的值转换为对应的字符串时,可以把基本类型的值和一个空字符串连接。
3.5.3 表达式类型的自动提升
- 所有的byte类型、short类型和char类型将被提升为int类型
- 整个算术表达式的数据将会自动提升到与表达式最高等级操作数同样的类型。