第二章:基础语法
2.1:关键字和保留字
-
关键字
-
定义:被
Java
语言赋予了特殊含义,用做专门用途的字符串(单词) -
特点:关键字中所有字母都为小写
-
分类:
-
用于定义数据类型的关键字
class
、interface
、enum
、byte
、short
、int
long
、float
、double
、char
、boolean
、void
-
用于定义流程控制的关键字
if
、else
、switch
、case
、default
、while
、do
、for
、break
、continue
、return
-
用于定义访问权限修饰符的关键字
private
、protected
、public
-
用于定义类、函数、变量修饰符的关键字
abstract
、final
、static
、synchronized
-
用于定义类与类之间关系的关键字
extends
、implements
-
用于定义建立实例及引用实例,判断实例的关键字
new
、this
、super
、instanceof
-
用于异常处理的关键
try
、catch
、finally
、throw
、throws
-
用于包的关键字
package
、import
-
其他修饰关键字
native
、strictfp
、transient
、volatile
、assert
-
用于定义数据类型值的字面值
true
、false
、null
-
-
-
保留字
现有
Java
版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字。goto
、const
2.2:标识符
-
定义
Java
对各种变量、方法和类等要素命名时使用的字符序列为标识符。 -
定义合法标识符规则
- 由26个英文字母大小写,
0-9
、_
或$
组成。 - 数字不可以开头。
- 不可以使用关键字和保留字,但能包含关键字和保留字。
Java
中严格区分大小写,长度无限制。- 标识符不能包含空格。
- 由26个英文字母大小写,
-
Java
中的名称命名规范- 包名:多单词组成时所有字母都小写。
xxxyyyzzz
- 类名、接口名:多单词组成时,所有单词的首字母大写。
XxxYyyZzz
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。
xxxYyyZzz
- 常量名:所有字母都大写。多单词时每个单词用下划线连接。
XXX_YYY_ZZZ
- 包名:多单词组成时所有字母都小写。
2.3:变量
-
变量的概念
内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化,变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值。
-
变量的作用
用于在内存中保存的数据。
-
变量的使用
-
声明变量
语法:
<数据类型> <变量名称>
-
变量的赋值
语法:
<变量名称> = <值>
-
声明和赋值变量
语法:
<数据类型> <变量名> = <初始化值>
-
-
使用变量注意
Java
中每个变量必须先声明,后使用。- 使用变量名来访问这块区域的数据
- 变量的作用域:其定义所在的一对
{}
内。 - 变量只有在其作用域内才有效。
- 同一个作用域内,不能定义重名的变量。
-
变量的分类
-
整数类型:
byte
、short
、int
、long
Java
各整数类型有固定的表数范围和字段长度,不受具体OS
的影响,以保证Java
程序的可移植性。Java
的整形常量默认为int
型,声明long
型常量须后加l
或L
。Java
程序中变量通常声明为int
型,除非不足以表示较大的数,才使用long
。
类型 占用存储空间 表数范围 byte 1字节 -128 ~ 127 short 2字节 − 2 15 -2^{15} −215 ~ 2 15 2^{15} 215 - 1 int 4字节 − 2 31 -2^{31} −231 ~ 2 31 2^{31} 231 - 1 long 8字节 − 2 63 -2^{63} −263 ~ 2 63 2^{63} 263 - 1 -
浮点类型:
float
、double
- 与整数类型类似,
Java
浮点类型也有固定的表数范围和字段长度,不受具体操作系统的影响。 - 浮点型常量有两种表示形式
- 十进制数形式:如
5.12
、512.0f
、.512
(必须有小数点) - 科学计数法形式:如
5.12e2
、512E2
、100E-2
- 十进制数形式:如
float
单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需要。double
双精度,精度是float
的两倍。通常采用此类型。Java
的浮点型常量默认为double
型,声明float
型常量,须后加f
或F
。
类型 占用存储空间 表数范围 单精度 4字节 -3.403E38 ~ 3.403E38 双精度 8字节 -1.798E308 ~ 1.798E308 - 与整数类型类似,
-
字符类型:
char
char
型数据用来表示通常意义上"字符"(2字节)Java
中的所有字符都使用Unicode
编码,故一个字符可以存储一个字母,一个汉字,或其他书面语一个字符- 字符型变量的三种表示形式
- 字符常量是用单引号(‘’)括起来的单个字符。
Java
中还允许使用转义字符\
来将其后的字符转变为特殊字符型常量。- 直接使用
Unicode
值来表示字符型常量:\uXXXX
。其中,XXXX
代表一个十六进制整数。
char
类型是可以进行运算的。因为它都对应有Unicode
码。
-
布尔类型:
boolean
boolean
类型用来判断逻辑条件,一般用于程序流程控制。boolean
类型数据只允许取值true
和false
,无null
。
-
-
基本数据类型转换
-
自动类型转换
-
容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
-
有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
-
byte
、short
、char
之间不会相互转换,他们三者在计算机时首先转换为int
类型。 -
boolean
类型不能与其他数据类型运算。 -
当把任何基本数据类型的值和字符串
String
进行连接运算时(+
),基本数据类型的值将自动转换为字符串(String
)类型。
-
-
强制类型转换
- 自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符:
()
,但可能造成精度降低或溢出,格外要注意。 - 通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型
boolean
类型不可以转换为其他的数据类型。
- 自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符:
-
2.4:运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
-
算术运算符
运算符 运算 范例 结果 + 正号 + 3 3 - 负号 b = 4; - b -4 + 加 5 + 5 10 - 减 6 - 4 2 * 乘 3 * 4 12 / 除 5 / 5 1 % 取模(取余) 7 % 5 2 ++ 前自增,先运算后取值 a = 2; b = ++ a; a = 3; b = 3; ++ 后自增,先取值后运算 a = 2;b = a ++; a = 3; b = 2; – 前自减,先运算后取值 a = 2; b = --a a = 1; b = 1 – 后自减,先取值后运算 a = 2; b = a– a = 1; b = 2 + 字符串连接 “He” + “llo” “Hello” 注意:如果对负数取模,可以把模数负号忽略不记,但被模数是负数则不可忽略。
-
赋值运算符
- 符号:
=
- 当
=
两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。 - 支持连续赋值。
- 当
- 扩展赋值运算符:
+=
、-=
、*=
、/=
、%=
- 符号:
-
比较运算符(关系运算符)
运算符 运算 范例 结果 == 相等于 4 == 3 false != 不等于 4 != 3 true < 小于 4 < 3 false > 大于 4 > 3 true <= 小于等于 4 <= 3 false >= 大于等于 4 >= 3 true instanceof 检查是否是类的对象 “Hello” instanceof String true - 比较运算符的结果都是
boolean
型,也就是要么是true
,要么是false
。 - 比较运算符
==
不能误写成=
。
- 比较运算符的结果都是
-
逻辑运算符
a b a & b a && b a | b a || b !a a^b true true true
true
true
true
false
false
true false false
false
true
true
false
true
false true false
false
true
true
true
true
false false false
false
false
false
true
false
注意:
&
和&&
以及|
和||
的区别- 单
&
或者单|
时,左边无论真假,右边都进行运算。 &&
或者||
时,当左边能确定这个式子的真假时,右边就不参与运算。
- 单
-
位运算符
运算符 运算 细节 << 左移 空位补0,被移除的高位丢弃,空缺位补0 >> 右移 被移位的二进制最高位是0,右移后,空缺位补0,最高位是1,空缺位补1 >>> 无符号右移 被移位二进制最高位无论是0或者是1,空缺位都用0补 & 与运算 二进制位进行 &
与运算,只有1 & 1
时结果是1,否则是0| 或运算 二进制位进行` ^ 异或运算 相同二进制位 ^
运算,结果是0,不相同二进制位^
运算,结果是1~ 取反运算 正数(负数)取反,各二进制码按补码各位取反 -
三元运算符
- 格式:
(条件表达式) ? 表达式1 : 表达式2
- 说明:
- 条件表达式的结果为
boolean
类型。 - 如果表达式为
true
,则执行表达式1;如果表达式为false
,则执行表达式2。 - 表达式1和表达式2要求是一致的。
- 条件表达式的结果为
- 格式:
-
运算符的优先级
- 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。
- 只有单目运算符、三元运算符、赋值运算符是从右向左运算的。
2.5:程序流程控制
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成功能的小逻辑模块。
其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
-
顺序结构
程序从上到下逐行地执行,中间没有任何判断和跳转。
-
分支结构
-
if - else
-
格式一
if(条件表达式) { 执行代码块; }
-
格式二
if(条件表达式) { 执行代码块1; } else { 执行代码块2; }
-
格式三
if(条件表达式1) { 执行代码块1; } else if (条件表达式2) { 执行代码块2; } ..... else { 执行代码块n; }
-
说明:
- 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量。
- 语句块只有一条执行语句时,一对
{}
可以省略,但建议保留。 if - else
语句结构,根据需要可以嵌套使用。- 当
if - else
结构是"多选一"时,最后的else
是可选的,根据需要可以省略。 - 当多个条件是"互斥"关系时,条件判断语句及执行语句间顺序无所谓。
- 当多个条件是"包含"关系时,“小上大下/子上父下”。
-
-
switch - case
-
格式:
switch(表达式) { case 常量1: 执行代码块1; // break; case 常量2: 执行代码块2; // break; ..... case 常量N; 执行代码块N; // break; default: 执行代码块; // break; }
-
说明
-
根据
switch
表达式中的值,依次匹配各个case
中的常量。一旦匹配成功,则进入相应的case
结构中,调用其执行语句。当调用完执行语句后,则仍然继续向下执行其他case
结构中的执行语句,直到遇到break
关键字或此switch-case
结构末尾结束为止。 -
break
,可以使用在switch-case
结构中,表示一旦执行到此关键字,就跳出switch - case
结构。 -
switch
结构中的表达式,只能是如下的6种数据类型之一:byte
、short
、char
、int
、枚举类型(JDK5.0
新增)、String (JDK7.0新增)
-
case
之后只能声明常量。不能声明范围。 -
default
相当于if - else
结构中的else
。default
结构是可选的,而且位置是灵活的。
-
-
switch - case
和if - else
比较- 凡是可以使用
switch-case
的结构,都可以转换为if - else
。反之,不成立 - 我们写分支结构时,当发现既可以使用
switch - case
,(同时,switch
中表达式的取值情况不太多),又可以使用if - else
时,我们优先选择使用switch - case
。原因:switch - case
执行效率稍高。
- 凡是可以使用
-
-
-
循环结构
-
在某些条件满足的情况下,反复执行特定代码的功能。
-
循环语句的四个组成部分:
- 初始化部分(
init_statement
) - 循环条件部分(
test_exp
)【boolean
类型】 - 循环体(
body_statment
) - 迭代部分(
alter_statement
)
- 初始化部分(
-
for
for(1; 2; 4) { 3; }
执行过程:
1-2-3-4-2-3-4-2-3-4-...-2
说明:
- 2循环条件部分为
boolean
类型表达式,当值为false
时,退出循环。 - 1初始化部分开源声明多个变量,但必须是同一个类型,用逗号分隔。
- 4开源有多个变量更新,用逗号分隔。
- 2循环条件部分为
-
while
1; while(2) { 3; 4; }
执行过程:
1-2-3-4-2-3-4-2-3-4-...-2
执行过程:
- 写
while
循环千万小心不要丢了迭代条件。一旦丢了,就可以导致死循环。 - 我们写程序,要避免出现死循环。
for
循环和while
循环是可以相互转换的。【它俩循环的初始化条件部分的作用域不同】
- 写
-
do - while
1; do{ 3; 4; } while(2);
执行过程:
1-3-4-2-3-4-...-2
说明:
do - while
循环至少会执行一次循环体。
-
-
break
和continue
关键字的使用使用范围 循环中使用的作用(不同点) 相同点 break switch-case
、循环结构中结束当前循环 关键字后面不能声明执行语句 continue 循环结构中 结束当次循环 关键字后面不能声明执行语句 -
使用标记指明要跳出的嵌套中的哪一层循环
label:for(int i = 1; i <= 4; i++) { for(int j = 1; j <= 10; j++) { if (j % 4 == 0) { //break label; continue label; } System.out.print(j); } System.out.println(); }
-