关键字
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写
保留字:现Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字。目前只有 goto
和 const
。
标识符
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符。也就是说,凡是自己可以起名字的地方都叫标识符。
合法标识符规则:
- 由26个英文字母大小写,0-9 ,_ 或 $ 组成。
- 数字不可以开头。
- 不可以使用关键字和保留字,但能包含关键字和保留字。
- Java中严格区分大小写,长度无限制。
所以Static
是合法的标识符,并不与关键字static
冲突。 - 标识符不能包含空格。
插曲小tip:
在这里直接输入 cmd
,回车,cmd 命令行就会自动定位到这个目录。
标识符命名规范
规范不是规则,是一种良好的编程习惯。
- 在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
- Java 采用 unicode 字符集,因此标识符也可以使用汉字声明,但是不建议使用。
- 包名:多单词组成时所有字母都小写:
xxxyyyzzz
- 类名、接口名:多单词组成时,所有单词的首字母大写:
XxxYyyZzz
(大驼峰) - 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个
单词首字母大写:xxxYyyZzz
(小驼峰) - 常量名:所有字母都大写。多单词时每个单词用下划线连接:
XXX_YYY_ZZZ
更多细节见《代码整洁之道》。
变量
整型
类型 | 存储空间 | 范围 |
---|---|---|
byte | 1字节 | -128 ~ 127 |
short | 2字节 | -2¹⁵ ~ 2¹⁵-1 |
int | 4字节 | -2³¹ ~ 2³¹-1(约21亿) |
long | 8字节 | -2⁶³ ~ 2⁶³-1 |
- 应留意一下
byte
的范围,因为比较小,很容易超出 - 定义
long
时,应在数值后加个L
(小写的也行),如long x = 9999999999L;
- 常用的是
int
浮点型
类型 | 存储空间 | 范围 |
---|---|---|
float | 4字节 | -3.403E38 ~ 3.403E38 |
double | 8字节 | -1.798E308 ~ 1.798E308 |
- 使用
float
时和long
类似,需要在数值后加个F
(或小写的),如double y = 0.00000001F;
double
能表示的范围比long
大,这是由定点数浮点数的表示方式决定的- 常用的是
double
字符型
char
,2字节,使用一对单引号定义一个字符,如char c1 = 'a';
注意 ` 和 ‘ 的区别。
可以定义很多国家的字符,如char c2 = '祈';
char c3 = 'の';
- 转义字符:
- 也可以直接使用 Unicode 值来定义,如
char c4 = \u0053;
- 字符集
- ASCII
- 不能表示所有字符。
- Unicode
- 将世界上所有的符号都纳入其中,没有乱码的问题。
- 缺点:无法区别 Unicode 和 ASCII、存储空间的浪费等。
- UTF-8
- 一种变长的编码方式。
- 目前最常用。
- ASCII
布尔型
boolean
,只能取 true
或 false
用来判断逻辑条件,一般用于程序流程控制。
字符串类型
String
注意 S 大写。
String 不是基本数据类型,属于引用数据类型。使用方式与基本数据类型一致,如 String str = “abcd”;
可以只定义一个字母的字符串或空的字符串:
String s1 = "a";
String s2 = "";
相比起来,char
不能为空
一个字符串可以通过连接符 +
串接另一个字符串,也可以直接串接其他类型的数据。如
String nameStr = "name: ";
String name = "Mary";
String idStr = "id: ";
int id = 100;
System.out.println(nameStr + name);
System.out.println(idStr + id);
System.out.println("name: " + name);
System.out.println("id: " + id);
练习1:
练习2:输出 * *
(中间是Tab)
System.out.println("* *"); // √
System.out.println('*' + '\t' + '*'); // ×
System.out.println('*' + "\t" + '*'); // √
System.out.println('*' + '\t' + "*"); // ×
System.out.println('*' + ('\t' + "*")); // √
数据类型转换
容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
(“容量”指的是数的范围,而不是占用内存大小)
byte
,short
,char
之间不会相互转换,他们三者在计算时首先转换为int
类型。
就算是如byte + byte
也要拿int
来接收。boolean
类型不能与其它数据类型运算。当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串(String)类型。
如
long a = 999999;
在数值末尾不加L
也不会报错,原因是通过自动类型转换,把999999
视作int
型,赋值时自动转换为long
型。
如果值超出了 int 的范围就不行了,如long b = 299999999999L
,就必须加L
,否则编译会报错:
定义
float
类型的值时不管怎么样都要加F
,因为不加的话默认是double
型的,double
型不会自动转到float
,编译会报错:
整形常量默认也是
int
型,所以byte d = 1; byte e = d + 1;
是不对的:
应该是
int e = d + 1;
就算是byte d = 1; d = d + 1;
也是不对的:
强制类型转换
- 自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。
使用时要加上强制转换符:()
,但可能造成精度降低或溢出,格外要注意。 - 通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。