标识符和关键字
标识符
标识符 就是用于给程序中变量、类、方法命名的符号。Java 语言是 区分大小写的 ,使用标识符的时候,需要注意如下规则:
- 标识符可以由字母、数字、下划线和美元符组成,其中数字不能打头(此处的字母并不局限于 26 个英文字母,而且可以包含中文字符、日文字符等)
- 标识符不能是 Java 关键字和保留字
- 标识符不能包含空格
- 标识符只能包含美元符,不能包含 @ 、 # 等其它特殊字符
关于标识符,还有一些规范(可以不遵守):
- 包名:多单词组成时所有字母都小写(xxxyyyzzz)
- 类名、接口名:多单词组成时,所有单词的首字母大写(XxxYyyZzz)
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写(xxxYyyZzz)
- 常量名:所有字母都大写,多单词时候每个单词用下划线连接(XXX_YYY_ZZZ)
- 为了提高阅读性,起名字时应该尽量 “见名知意”
Java 关键字
Java 语言中有一些具有特殊用途的单词被称为 关键字,当定义标识符的时候,不要让标识符和关键字相同,否则引起错误。
Java 的所有关键字都是小写的,也就是说 TRUE 并不是 Java的关键字。
Java 数据类型
Java 语言是 强类型语言(所有的变量必须先声明、后使用;指定类型的变量只能接受类型与之匹配的值),这意味着每个变量和每个表达式都有一个在编译时就确定的类型,类型限制了一个变量能被赋的值,限制了一个表达式可以产生的值,限制了在这些值上可以进行的操作,并确定这些操作的含义。声明变量的语法如下:
type varName [= 初始值];
定义变量的时候既可以指定初始值,也可以不指定初始值,但至少需要指定变量类型和变量名两个部分。定义变量时的变量类型可以是 Java 语言支持的所有类型,Java 语言支持的类型分为:基本类型和引用类型 。
空类型就是 null 值的类型,因为 null 类型没有名称,所以不能声明一个 null 类型的变量或者转换到 null 类型。空引用(null)是 null 类型变量唯一的值,空引用可以转换为任何引用类型(不能转换为基本类型)。
基本数据类型
(一)整型
整型通常有如下 4 种类型:
类型名称 | 内存大小 | 表数范围 |
---|---|---|
byte | 8位 | -128(-2^7) ~ 127(2^7 - 1) |
short | 16位 | -32768(-2^15) ~ 32767(2^15 - 1) |
int | 32位 | -2147483648(-2^31) ~ 2147483647(2^31 - 1) |
long | 64位 | -2^63 ~ 2^ 63 - 1 |
int 是最常见的整数类型,通常情况下直接给出一个整数值默认就是 int 类型,需要注意下面两种情形:
- 如果直接将一个较小的整数值(在 byte 或 short 类型的表数范围内)赋给一个 byte 或 short 变量,系统会自动把这个整数值当成 byte 或 short 类型来处理
- 如果使用一个巨大的整数值(超出了 int 类型的范围),Java 不会自动把这个整数值当成 long 类型来处理。如果希望系统把一个整数值当成 long 类型来处理,应在这个整数值后面增加 l 或者 L 作为后缀
Java 中整数值有 4 种表示方式:
- 十进制:0 ~ 9,满 10 进 1
- 二进制:0 和 1,以 0b 或者 0B 开头
- 八进制: 0 ~ 7,满 8 进 1,以数字 0 开头表示
- 十六进制:0 ~ 9 以及 A ~ F,满 16 进 1,以 0x 或者 0X开头
所有数字在计算机底层都以二进制形式存在,并且不管正负,都是以补码的方式存储:
- 正数:三码合一
- 负数:
- 原码:直接将一个数值转换成二进制,最高位是符号位
- 负数的反码:是对原码按位取反,只是最高位(符号位)确定为 1
- 十进制:反码加 1
(二)字符型
字符型通常用于表示单个字符,字符型值必须使用单引号括起来。Java 语言使用 16 位的 Unicode 字符集作为编码方式。字符型值有如下三种表示方法:
- 直接通过单个字符来指定字符型值,如 ‘A’、‘9’ 和 ‘0’ 等
- 通过转义字符表示特殊字符型值,如 ‘\n’、‘\t’ 等
- 字节使用 Unicode 值来表示字符型值,格式是 ‘\uXXXX’,其中 XXXX 代表一个十六进制的整数
由于计算机底层保存字符时,实际是保存该字符对应的编号,因此 char 类型的值也可以作为整数值来使用,完全可以参与加、减、乘、除以及比较大小的运算。
(三)浮点型
Java 的浮点型有两种:float 和 double ,浮点型也有固定的表数范围和字段长度(与机器无关):
- float 类型:单精度浮点数,占有 4 个字节 32 位,其中第 1 位是符号位,接下来 8 位表示指数,再接下来的 23 位表示尾数
- double 类型:双精度浮点数,占有 8 个字节 64 位,其中第 1 位是符号位,接下来 11 位表示指数,再接下来的 52 位表示尾数
Java 中的浮点数有两种表示形式:
- 十进制数形式:例如 5.12
- 科学计数法形式:例如5.12e2
Java 中的浮点数默认是 double 类型,如果希望 Java 把一个浮点类型当成 float 类型处理,应该在这个浮点类型值后紧跟 f 或 F。
Java 还提供了三个特殊的浮点数值:正无穷大、负无穷大和非数,用于表示溢出和出错。正无穷大通过 Double 或 Float 类的 POSITIVE_INFINITY 表示;负无穷大通过 Double 或 Float 类的 NEGATIVE_INFINITY 表示;非数通过 NaN 表示。所有正无穷大的数都是相等的,所有负无穷大的数也是相等的,而非数不与任何数值相等,甚至和非数本身都不相等。
当程序中用到的数值位数特别多地时候,可以在数值中使用下画线,不管是整型数值,还是浮点型数值,都可以自由地使用下画线:
double pi = 3.14_15_92_65_36;
(四)布尔型
布尔型只有一个 boolean 类型,用于表示逻辑上的 “真” 或 “假”,数值只能是 true 或 false,不能用 0 或者 非 0 来代表。boolean 类型的值或者变量主要用于流程控制。
基本类型转换
(一)自动类型转换
系统支持把某种基本类型的值直接赋给另一种基本类型的变量,这种方式被称为自动类型转换。当把一个 表数范围小的数值或变量直接赋给另一个表数范围大的变量时 ,系统将可以进行自动类型转换:
上图中左边的数值类型可以自动转换为右边的数值类型。不仅如此,当把任何基本类型的值和字符串值进行连接运算的时候,基本类型的值将自动转换为字符串类型:
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
String str = "Hello";
System.out.println( a + b + str); // 30Hello
System.out.println(str + a + b); // Hello1020
}
}
(二)强制类型转换
强制类型转换的语法格式是:(targetType)value,当进行强制类型转换的时候,可能造成精度降低或溢出:
public class Test {
public static void main(String[] args) {
int iValue = 233;
byte bValue = (byte)iValue;
System.out.println(bValue); // -23
}
}
通常字符串不能直接转换为基本类型,但可以通过基本类型对应的包装类把字符串转换为基本类型:
public class Test {
public static void main(String[] args) {
String a = "45";
int aValue = Integer.parseInt(a);
System.out.println(aValue);
}