关键字

定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写


保留字:现Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字。目前只有 gotoconst


标识符

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
      • 一种变长的编码方式。
      • 目前最常用。

布尔型

boolean,只能取 truefalse
用来判断逻辑条件,一般用于程序流程控制。

字符串类型

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;

    也是不对的:


强制类型转换

  • 自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。
    使用时要加上强制转换符:(),但可能造成精度降低或溢出,格外要注意。
  • 通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。