第 2章 Java语言编程基础
2.1 标识符和关键字
2.2 基本数据类型
2.3 变量
2.4 文字常量
2.5 表达式
2.6 控制语句
2.7 习题
2.1 标识符和关键字
标识符:
– 可以是任意长度。
– 由字母、数字、下划线,_”和美元符号,$”组成。
– 第一个字符必须是字母、下划线或美元符号。
– 对字母大、小写敏感。
– 不能与关键字同名。
– 不能是 true,false或 null。
2.1 标识符和关键字(续)
标识符:
例:
HelloJava //正确
_isTrue //正确
$100 //正确
2_example //起始字符非法
Hello! //非法含有字符,!”
Hello Java //非法含有空格
Hello+Java //非法含有运算符
2.1 标识符和关键字(续)
关键字:
– 是 Java语言的保留字,不能用作标识符。
– 除 const和 goto外,都有特殊意义。
– true,false和 null不是关键字。
2.2 基本数据类型
布尔类型:
– boolean
算术类型:
– 整数类型
char,byte,short,int,long
– 浮点数类型
float,double
2.2 基本数据类型(续)
所有基本数据类型占用的存储空间和取值范围都是固定的。
没有无符号数据类型。
每个基本数据类型都定义有相应的包装类。
2.3 变 量
变量声明的一般格式如下:
数据类型 变量名 1,变量名 2,?,变量名 n;
例:
double width;
char c;
int i,j,k;
声明变量时,可以同时初始化。
例:
int i=1,j=2;
double width=5.6,length,area=50.8;
boolean answer=true;
char c= 'A';
2.4 文字常量
2.4.1 整型常量
2.4.2 浮点型常量
2.4.3 字符常量
2.4.4 字符串常量
2.4.5 布尔常量
2.4.1 整型常量
十六进制表示:
– 以 0X或 0x开头,例,0X5cD
八进制表示:
– 以 0开头,例,0222
十进制表示:
– 例,32
注意,整型常量的默认数据类型是 int型。如果要将一个整型常量说明为 long型,则应在常量后加后缀 L(或 l)。例,567892L
2.4.2 浮点型常量
一般表示形式(小数表示形式):
– 由整数和小数两部分组成。
– 可省略其中的一部分。
例,5.6,6.,.9
注意,小数点不能省略。
指数表示形式:
– 由尾数、字母 E(或 e)、指数组成。
例,4.1E12,.27e4,5.E-2,5E-2
2.4.2 浮点型常量(续)
浮点型常量的默认数据类型为 double型。
要将其说明为 float型,则应加后缀 F(或 f)。
例,5.6f,4.1E5F
加后缀 D(或 d),可以将浮点型常量显式说明为 double型。
例,6.D
用一般表示形式表示的浮点型常量,如果其后加有后缀 F,f,D或 d,则小数点可以省略。
例,1F //float型
22D //double型
2.4.3 字符常量
单引号括起来的一个字符例,'A','b','$','*'
转义字符
– 以反斜杠,\”开头,后跟一个字符或 Unicode码。
– 通常用来表示那些一般方法无法表示的字符。
字符常量的数据类型是 char。
2.4.3 字符常量(续)
转义字符 含 义 Unicode码
\b 退格 \u0008
\f 换页 \u000C
\n 换行 \u000A
\r 回车 \u000D
\t 水平制表符 \u0009
\\ 反斜杠 \u005C
\? 单引号 \u0027
\,双引号 \u0022
2.4.3 字符常量(续)
1~3位八进制 Unicode码表示:
– 八进制数字可以是 1~3位,最好写全 3位。
– 其值只能在 000~377之间。
4位十六进制 Unicode码表示:
– 十六进制数字必须有 4位。
例如:
'\101' // 'A'
'\u0047' // 'A'
'\007' // beep声
2.4.4 字符串常量
用双引号括起来的一串字符
– 串中的字符也可以是任意有效的转义字符。
– 标识字符串的两个双引号必须在同一行。
例:
""
" a string"
" Hello!\n How are you?"
2.4.4 字符串常量(续)
二义性问题:
"\0116" //等价于 "\t6"
"\116" //等价于 "N"
因此,如果字符串中的某个字符使用八进制 Unicode码来表示,最好给出全部 3位八进制数。
2.4.5 布尔常量
取值,false( 假 ) 或 true( 真 ) 。
数据类型为 boolean。
例 2-1 变量与文字常量的使用源代码 运 行
2.5 表达式
由运算符和操作数组成。
执行表达式操作所求的值称为表达式的值,
它也可用作另一个表达式的操作数。
表达式值的类型由参加运算的数据的类型和运算符决定。
例:

6+5
x=4
x=2*6+2-4/2
2.5 表达式(续)
2.5.1 运算符
2.5.2 表达式中数据类型的转换
2.5.1 运 算 符
用来实现操作数的加、减等运算。
运算符具有优先级和结合性。
按要求操作数的多少,运算符可分为一元运算符、二元运算符、三元运算符。
按运算性质,运算符可分为算术运算符、关系运算符、逻辑运算符等。
2.5.1 运 算 符(续)
基本赋值运算符
算术运算符
关系运算符
逻辑运算符
位运算符
复合赋值运算符
条件运算符
字符串运算符
改变优先级运算符基本赋值运算符
基本赋值运算符( =)用于赋值运算。
例:
x=2.6
x=y=z=2.6
4= x //错误,左操作数必须是变量
赋值运算时,左边变量的类型必须与右边的值相容。
例:
float x=1.2; //错误,不相容
float y=1.5f;
算术运算符
基本算术运算符:
– +,-,*,/,%
一元加、减运算符:
– +,-
递增、递减运算符:
– ++,--
基本算术运算符
当,/”运算符的两个操作数都是整数时,其计算结果是运算后所得商的整数部分。
例:
5/2 //值为 2
“%”的意义是求两个数相除后的余数。
例:
10%4 //值为 2
4.6%2.1 //值为 0.4
一元加、减运算符
一元加、减运算符意义等同于代数中的正、负号。
实际编程时,一元加号通常省略。
例:
i=-5
i=8/-2
i=8/(-2)
递增、递减运算符
有前缀和后缀两种形式:
– 前缀形式是先计算操作数的值,后把操作数的值作为表达式的结果。
– 后缀形式是先将操作数的值作为表达式的结果,
然后把操作数的值增 1或减 1。
例:
int i=5;
int j=3;
int k1=i++; //k1=5,i=6
int k2=++i; //k2=7,i=7
int m1=---j; //m1=2,j=2
int m2=j--; //m2=2,j=1
递增、递减运算符(续)
递增、递减运算中的操作数不能是常量或表达式。
例:
5++ //错误
(i-j)-- //错误
参与递增、递减运算的操作数可以是浮点数类型的变量。
例 2-2 算术运算源代码 运 行关系运算符
<,<=,>,>=,= =,!=
运算结果是一个 boolean型的值。
,= =”和,!=”的操作数可以是任意数据类型,其他关系运算符的操作数不能是 boolean型的数据,也不能是对象。
浮点数一般不能直接进行相等比较。
逻辑运算符
x y !x x&&y x||y x^y
false false true false false false
false true true false true true
true false false false true true
true true false true true false
逻辑运算符(续)
进行逻辑与,&&”或逻辑或,||”运算时,只要能够确定运算结果,运算就不再继续执行。
例:
int i=2,j=4 ;
boolean b=i>j&&j++>i--; //b=false,i= 2,j=
4
另外两个逻辑运算符:,&”、,|”。
例 2-3 关系运算与逻辑运算源代码 运 行位运算符
操作数和运算结果都是整数类型 。
运算对象是操作数的二进制,位,。
分为按位运算符和移位运算符 。
按位运算符
x y ~x x&y x|y x^y
0 0 1 0 0 0
0 1 1 0 1 1
1 0 0 0 1 1
1 1 0 1 1 0
例:
071,0 0 1 1 1 0 0 1
052:( ^) 0 0 1 0 1 0 1 0
071^052,0 0 0 1 0 0 1 1
移位运算符
左移位( <<)将左操作数的二进制值向左移动指定的位数,左移后,低位补 0,移出的高位舍弃。
右移位( >>)将左操作数的二进制值向右移动指定的位数,右移后,移出的低位舍弃,如果原值为正则高位补 0;如果原值为负则高位补符号位1。
无符号右移位( >>>)的意义与,>>”大致相同,不过,
右移后,无论原值是正或负,高位一律补0。
例 2-4 位运算源代码 运 行复合赋值运算符
有 11个,+=,-=,*=,/+,%=,<<=,
>>=,>>>=,&=,^=,|=。
例,
x*=2 //等价于 x=x*2
x*=x+2 //等价于 x=x*( x+2)
条件运算符例:
x=(4>5)?4:5 //x=5
字符串运算符例:
"Hello!"+" Java" //值为 "Hello! Java"
注意,当运算符,+” 用于操作字符串时,它的两个操作数中可以有一个不是字符串。
例 2-5 字符串运算源代码 运 行改变优先级运算符例:
x=4+6*8-10*2 //x=32
x=((4+6)*8-10)*2 //x=140
2.5.2 表达式中数据类型的转换
自动类型转换
强制类型转换自动类型转换
对 byte,short或 char型的变量进行算术或按位运算,在正式运算前,这些变量的值会自动转换为 int型。
对 int型或 char型常量,如果其值或多个这些常量运算结果的值不超出范围,就可以直接赋给 byte,short或 char类型的变量。
对两个不同数据类型操作数的值进行运算时,
系统将自动地把其中数据类型取值范围小的转换成和另一个相同。
自动类型转换(续)
自动类型转换是一种安全的转换。
例 2-6 取值范围小于 int类型的变量进行算术或按位运算源代码 编 译强制类型转换例:
float x=5.5f,y;
y=x-(int)x; //y=0.5
注意:
1,强制类型转换是一种不安全的转换。
2,转换并不实际改变操作数的数据类型 。
2.6 控制语句
2.6.1 条件语句
2.6.2 循环语句
2.6.3 转移语句
2.6.1 条件语句
if-else语句
switch语句
if-else语句
if(布尔表达式 )
语句 1
else
语句 2
其中,else分支可有可无。且 if-else语句可以嵌套。
例 2-7 if- else语句源代码 运 行
switch语句
switch(整数类型表达式)
{
case 整数类型常量表达式 1:语句 1;
case 整数类型常量表达式 2:语句 2;
… ;
case 整数类型常量表达式 n:语句 n;
default:语句 n+ 1;
}
switch语句(续)
default与随后的语句 n+ 1可以没有。
如果希望 switch语句在执行完某一 case后的语句后,不再执行其他 case或 default分支,
就需要这个 case分支中的最后一条语句是
break语句。
例 2-8 switch语句源代码 运 行
2.6.2 循环语句
while语句
do-while语句
for语句
while语句
while(布尔表达式 )
语句例 2-9 while语句
f als e
tru e
语 句后续语句布尔 表达式源代码 运 行
do-while语句
do 语句
while (布尔表达式 );
注意:分号不可缺少。
f als e
tru e
语 句后续语句布尔表达式
for语句
for(初始化变量;布尔表达式;调整变量值)
语句初始化变量
f als e
tru e
调整变量值语 句后续语句布尔表达式
for语句(续)
,初始化变量”、“布尔表达式”、“调整变量值” 3部分皆可省略,但分号不能省略。
,初始化变量”部分一般用来初始化循环变量,
但事实上,它可以是任意合法的表达式或变量声明。不过,如果需要在其中声明多个变量时,这些变量的数据类型必须相同。
例:
for(int i=0,j=0;i<2&&j<3;i++,j++);
,初始化变量”部分如果省略或者不是用来给循环变量赋初值,则应在 for语句前给循环变量赋初值。
for语句(续)
,布尔表达式”部分如果省略,则 for语句的循环体内必须有其他控制循环执行的语句,否则会形成死循环。
,调整变量值”部分一般用来修改循环变量的值。
不过,它也可以是其他任意合法表达式。如果它不是用来修改循环变量的值或者省略,则应在 for
语句的循环体内设置相应的语句。
例 2-10 for语句源代码 运 行
for语句(续)
,初始化变量”和“调整变量值”部分都可以存在由逗号分隔的多个表达式。
例:
for(int i=0,j=0;i<2&&j<3;i++,
System.out.println("i="+i+" j="+j++));
注意,不可以在“初始化变量”部分同时出现声明变量和其他表达式,出现这种情况时,编译器会报告错误。
例:
for(int i=0,i++;i<2&&j<3;i++,j++); //错误
2.6.3 转移语句
break语句
continue语句
return语句
break语句
break语句可以用在 switch语句中。
break语句可以用在循环语句中:
– 不带标号的 break语句中断当前循环体的执行,开始执行该重循环后面的语句。
– 带标号的 break语句使程序流程跳转到标号标示的循环体之外。
例 2-11 break语句源代码 运 行
continue语句
只能用在循环语句的循环体内:
– 不带标号的 continue语句中断本次循环,直接回到当前循环的起始处,开始下一轮循环。
– 带标号的 continue语句使程序流程跳转到标号标示处,直接开始该标号之后循环的下一轮。
例 2-12 continue语句源代码 运 行
return语句
用在方法中 。
作用是使程序流程从当前执行的方法返回 。
2.7 习 题