第 2章 Java基本编程结构在本章中,将学习 Java的基本数据类型和相关主题,如变量,常量,数据类型,操作符和控制结构,学习如何利用基本数据类型以及操作符来编写简单的 Java程序 。
1,掌握 Java语言的基本元素;
2,理解 Java程序的基本构成;
3.掌握结构化程序设计的三种基本流程。
主要内容
我们用 windows下的记事本程序建立一个名为 Test.java的源文件(建议初学者开始时还是用记事本程序作为 Java源文件的编辑器,在编写几个 Java程序,熟悉理解 JDK的运行机理后,尽快采用轻量级集成开发环境,比如 Jcreator)。
例 2.1
public class Test {
public static void main(String[] args) {
System.out.println("欢迎进入 JAVA世界 !");
}
}
2.1 简单的 Java程序
在程序添加注释时可以用来解释程序的某些部分的作用和功能,
提高程序的可读性。此外,注释还可以用来暂时屏蔽某些程序语句,让编译器不要理会这些语句,等到需要时,只需简单地取消注释标记,这些程序语句又可以发挥作用了。因此,希望读者在编写程序时培养成在程序中添加注释的好习惯。 Java里的注释根据不同的用途分为三种类型:
1.单行注释就是在注释内容前面加双斜线( //)
2.多行注释在注释内容前面以单斜线加一个星形标记 (/*)开头,并在注释内容末尾以一个星形标记加单斜线 (*/)结束。
3.文档注释以单斜线加两个星形标记 (/**)开头,并以一个星形标记加单斜线 (*/)结束。
2.2 注释
Java type system
primitive reference null
char numeric boolean class interface array
integral floating-point
byte short int long float double
2.3 基本数据类型基本数据类型 复合数据类型
所有基本类型所占的位数都是确定的,并不因操作系统的不同而不同。
所有基本类型的关键词都是小写的。
数据类型 所占位数 数的范围
char 16 0 ~ 65535
byte 8 -27~ 27-1
short 16 -215~ 215-1
int 32 -231~ 231-1
long 64 -263~ 263-1
f loat 32 3.4e- 038 ~ 3.4e+ 038
double 64 1.7e- 308 ~ 1.7e+ 308
2.3 基本数据类型
布尔型数据只有两个值 true和 false,且它们不对应于任何整数值布尔型变量的定义如:
boolean b = true;
布尔型数据只能参与逻辑、关系运算:
&& || == != !
示例:
boolean b1;
boolean b2 = true;
b = !b2;
boolean b = (b1 && b2) != false;
2.3 基本数据类型 —布尔类型 (boolean)
字符型数据代表 16位的 Unicode字符
字符常量是用单引号括起来的一个字符
‘ a’ ‘B’ ‘\n’ ‘\u0030’
字符型数据的取值范围为
0~65535 或者说 \u0000~\uFFFF
\u0000为缺省值
示例
char c1; \\ 缺省值为 0
char c2 = ‘0’; \\ 赋初值为字符‘ 0’
char c3 = 32; \\ 用整数赋初值为空格
2.3 基本数据类型 —字符类型 (char)
特殊字符的常量表示法:
反斜线( Backslash) ‘ \\’
退格( Backspace) ‘ \b’
回车( Carriage return) ‘ \r’
进纸符( Form feed) ‘ \f’
制表符( Form feed) ‘ \t’
换行( New line) ‘ \n’
单引号( Single quote) ‘ \’’
八进制数( ‘ \0’~‘ \377’ ) ‘ \ddd’
Unicode字符 ‘ \uHHHH’
2.3 基本数据类型 —字符类型 (char)
整型常量
1,十进制整数如 123,- 456,0
2,八进制整数以 0开头,如 0123表示十进制数 83,- 011表示十进制数- 9。
3,十六进制整数以 0x或 0X开头,如 0x123表示十进制数 291,- 0X12表示十进制数
- 18。
整型变量类型为 byte,short,int或 long,byte在机器中占 8位,short占 16位,int占
32位,long占 64位。整型变量的定义如:
int x=123; //指定变量 x为 int型,且赋初值为 123
byte b = 8; short s = 10; long y = 123L; long z = 123l;
2.3 基本数据类型 —整数类型
(byte,short,int,long)
64位长整数以 l或 L结尾,12l,-343L,0xfffffffffL
1L << 32 等于 4294967296L
1 << 32 等于 0
没有以 l或 L结尾的数字,根据其实际值所属范围,
可以被用作 byte,short,或 int型整数
以 l或 L结尾的数字,无论其实际值所属范围怎样,
都被用作 long型整数
2.3 基本数据类型 —整数类型
(byte,short,int,long)
示例
byte b1; \\ 缺省值为 0
byte b2 = 127; \\ 赋初值为 127
short s1 = (short)(b1 + b2); \\ 强制类型转换
short s2 = (short)(b1 + 123) \\ 强制类型转换
int n = b1 + b2; \\ 不需要强制类型转换
long l1 = 2343; \\ 不需要强制类型转换
long l2 = 4294967296L; \\ 必须用 L或 l结尾
long l3 = 65536*63356; \\ 乘法运算越界,l3为 0
long l4 = 65536L*63356; \\ l4为 4294967296L
2.3 基本数据类型 —整数类型
(byte,short,int,long)
实型变量类型为 float或 double,float在机器中占 32位,double占 64位。实型变量的定义如:
double d1 = 127.0; \\ 赋初值为 127
double d2 = 127; \\ 赋初值为 127
float f1 = 127.0f; \\ 必须在数字后加 f或 F
float f2 = 4.0e38f;\\ 错误! 32位浮点数不能超过
\\ 3.4028234663852886e38
float f3 = (float)d1; \\ 必须强制类型转换
2.3 基本数据类型 —浮点型
(float,double)
程序中的基本存储单元,其定义包括变量名、变量类型和作用域几个部分,定义格式为:
Type varName [= value ][{,varName [=value]}];
int n = 3,n1 = 4;
Java中变量的 缺省初值 都是确定的:
布尔变量的初值为,false
整数变量的初值为,0
浮点数变量的初值为,0.0
引用(复合)变量的初值为,null
变量的作用域指可访问变量的一段代码区域,在程序中不同的地方声明的变量具有不同的作用域:局部变量、类变量、方法参数、例外处理参数。在一定的作用域内,变量名必须唯一。
2.4 变量
Class MyClass{

Int a;

public void aMethod(int b){

int c;

catch(exception e){

}

}

}
成员变量作用域方法参数作用域局部变量作用域异常处理参数作用域
Java中 的 常 量 值 是 用 文 字 串 表 示 的,它 区 分 为 不 同的 类 型,如 整 型 常 量 123,实 型 常 量 1.23,字 符 常 量
‘ a’,布 尔 常 量 true,false以 及 字 符 串 常 量 "This is a
constant string."。
与 C,C++不 同,Java中 不 能 通 过 #define命 令 把 一 个 标识 符 定 义 为 常 量,而 是 用 关 键 字 final来 定义,其定义格式为:
final Type varName = value [,varName [ =value] …];
final int globalAccount = 100,nationalAccount = 50;
final double PI=3.14159
2.5 常量到现在为止,我们已了解了 java语言中基本数据类型的特点及其表示形式。那么如何对这些数据进行处理和计算呢?
通常当人们要进行某种计算时,都要首先列出算式,这些算式由运算符和括号组成,然后求解其值。利用 java语言编写程序求解问题时也是这样。那么 java语言中定义了丰富的运算符。基本的运算符按功能划分,有 算术运算符、
关系运算符、逻辑运算符、位运算符
2.6 操作符
算术运算符用于实现数学运算。 Java定义的算术运算符有,+(加),
―(减),*(乘),/(除),%(取余),++(递增),- -(递减)。
Java提供了一种简写形式的运算符,在进行算术运算的同时进行赋值操作,称为算术赋值运算符。算术赋值运算符由一个算术运算符和一个赋值号构成,即,+=,-=,*=,/=,%=。
对,++”运算符和,--”运算符而言,有,前递增,,,后递增,,
,前递减,和,后递减,之分。,前递增,表示,++”运算符位于变量的前面;,后递增,表示,++”运算符位于变量的后面。类似地,,前递减,意味着,--”运算符位于变量的前面;,后递减,意味着,--”运算符位于变量的后面。对于前递增和前递减(如 ++A或 --A),会先执行运算,后赋值;而对于后递增和后递减(如 A++或 A--),则赋值,
后执行运算。
例 2.6
2.6 操作符 —算术运算符
关系运算符用于测试两个操作数之间的关系,形成关系表达式 。 关系表达式将返回一个布尔值 。 它们多用在控制结构的判断条件中 。 Java定义的关系运算符有,>( 大于 ),
<( 小于 ),>=( 大于等于 ),<=( 小于等于 ),==
( 等于 ),!=( 不等于 ) 。
例 2.7
2.6 操作符 —关系运算符
逻辑运算符用来进行逻辑运算 。 Java定义的逻辑运算符有,!( 非 ),&&( 与 ),||( 或 ) 。 若两个操作数都是
true,则逻辑与运算符 ( &&) 操作输出 true;否则输出
false。 若两个操作数至少有一个是 true,则逻辑或运算符
( ||) 操作输出 true,只有在两个操作数均是 false的情况下,
它才会生成一个 false。 逻辑非运算符 ( !) 属于一元运算符,
它只对一个自变量进行操作,生成与操作数的相反的值:
若输入 true,则输出 false;若输入 false,则输出 true。
例 2.8
2.6 操作符 —逻辑运算符
Java语言中的位运算总体来说分为两类:按位运算和移位运算,相应的也就提供了两类运算符,按位运算符 和 移位运算符 。 位运算符只用于整型和字符型数据 。
按位运算符
1.按位与运算 ( &)
2.按位或运算 ( |)
3.按位异或运算 ( ^)
4.按位取反运算 ( ~)
移位运算符
1.左移位运算符 ( <<)
2.右移位运算符 ( >>与 >>>)
2.6 操作符 —位运算符
赋值运算符 ( =)
赋值运算符,=”的作用是将运算符右边表达式的值赋给左边的变量 。
条件运算符 (?:)
在 Java语言中,使用的形式是,x? y,z;
上面的三目条件运算的规则是:先计算表达式 x的值,若 x 为真,则整个三目运算的结果是表达式 y的值;若 x为假,则整个三目运算的结果是表达式 z的值。
instanceof运算符对象运算符 instanceof用来判断一个对象是否是某一个类或者其子类的实例 。
括号运算符 ( )
括号运算符 ( ) 的优先级是所有运算符中最高的,所以它可以改变表达式运算的先后顺序 。
,运算符
,运算符用于访问对象实例或者类的类成员函数 。
new运算符
new运算符用于创建一个新的对象或者新的数组 。
2.6 操作符 —其他运算符
2.7 控制语句
分支语句,if-else,switch
循环语句,while,do-while,for
与程序转移有关的其它语句:
break,continue,return
例外处理语句,try-catch-finally,throw
if(boolean-expression1)
{
statements1;
}
else if(boolean-expression2)
{
statements2;
}

else
{
statementsN;
}
2.7 控制语句 ——条件语句 if-else
布尔表达式 boolean-expression是任意一个返回布尔数据类型的表达式,而且必须是(比 C或 C ++要严格)。
与 C或 C++一样,每个单一语句后面都要有分号。为了增强程序的可读性,应将 if或 else后的语句用 {}括起来。
else子句是任选的,不能单独作为语句使用,它必须和 if
语句配对使用,并且总是与离它最近的 if配对。
int i1 = 123;
int i2 = 456;
if( i1>i2 )
{
System.out.println(“The bigger one is:,+i1);
}
else
{
System.out.println(“The bigger one is:,+i2);
}
2.7 控制语句 ——条件语句 if-else
switch (expression)
{
case value1,
{
statements1;
break;
}
……
case valueN,
{
statementsN;
break;
}
[default,
{
defaultStatements;
}]
}
2.7 控制语句 ——多分支语句 switch
表达式 expression的返回值类型必须是这几种类型之一,int,byte,char,short。
case子句中的值 valueI必须是常量,而且所有
case子句中的值应是不同的。
default子句是任选的。
break语句用来在执行完一个 case分支后,使程序跳出 switch语句,即终止 switch语句的执行。
(如果某个 case分支后没有 break语句,程序将不再做比较而执行下一个分支。 )
switch语句的功能可以用 if-else语句来实现,但某些情况下,使用 switch语句更简炼。
2.7 控制语句 ——多分支语句 switch
int a = 100;
int b = 20;
int c;
char oper =?+?;
switch(oper)
{
case?+?:
{
c = a + b;
break;
}
case?-?:
{
c = a - b;
break;
}
default,
{
c = a * b;
break;
}
}
2.7 控制语句 ——多分支语句 switch
循环语句 while(当型循环)
[initialization] //初始化条件
while (termination){ //循环条件
body; //循环体
[iteration;] //迭代,变更循环条件
}
当表达式 termination为 true时,执行 {}中的语句,否则终止循环。
t
b
false
true
2.7 控制语句 ——循环语句 while(当型循环)
循环语句 do-while(直到型循环)
[initialization] //初始化条件
do{
body; //循环体
[iteration;] //迭代,变更循环条件
} while (termination) ; //循环条件首先执行一遍 {}中的语句,当表达式
termination为 true时,继续执行 {}中的语句,
否则终止循环。
t
b
false
true
2.7 控制语句 ——循环语句 do-while(直到型循环)
循环语句 for(另一种当型循环)
for (initialization; termination; iteration)
{
body; //循环体
}
initialization //初始化条件
termination //循环条件
iteration //迭代,变更循环条件
t
body
false
true
itera
init
2.7 控制语句 ——循环语句 for(另一种当型循环)
for语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。
初始化、终止以及迭代部分都可以为空语句 (但分号不能省 ),三者均为空的时候,相当于一个无限循环。
在初始化部分和迭代部分可以使用逗号语句,来进行多个操作。逗号语句是用逗号分隔的语句序列。
for( int i=0,int j=10; i<j; i++,j--)
{
……
}
2.7 控制语句 ——循环语句 for(另一种当型循环)
int n = 1,sum = 0;
while ( n<=10 )
{
sum = sum + n;
n++;
}
int n = 10,sum = 0;
do
{
sum += n;
n--;
}while( n>0);
int sum =0;
for( int i=1; i<=10; i++ )
{
sum += i;
}
while循环
do-while循环
for循环
2.7 控制语句 ——循环语句
在 switch语中,break语句用来终止 switch语句的执行,使程序从整个 switch语句后的第一条语句开始执行。
在循环语句中,break用于终止并跳出循环,从紧跟着循环体代码段后的语句执行。
在 Java中,可以为每个代码块加一个标号,一个代码块通常是用大括号 {}括起来的一段代码。加标号的格式为:
BlockLabel:{
codeBlock;
}
break语句的第二种使用情况就是跳出它所指定的块,并从紧跟该块后的第一条语句处执行。
BlockLabel:{
codeBlock;
break BlockLabel;
codeBlock;
}
2.7 控制语句 ——程序转移相关语句 break
a:{ //标记代码块 a
……
b:{ //标记代码块 b
……
c:{ //标记代码块 c
……
break b;
…… // 这段语句将不执行
} //代码块 c结束
…… //这段语句也不执行
} //代码块 b结束
…… //从这段语句开始执行
} //代码块 a结束
2.7 控制语句 ——程序转移相关语句 break
continue语句用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环 。 对于 for语句,在进行终止条件的判断前,还要先执行迭代语句 。 它的格式为:
continue;
也可以用 continue跳转到括号指明的外层循环中,这时的格式为
continue outerLable;
2.7 控制语句 ——程序转移相关语句 continue
outer,for( int i=0; i<10; i++ ) //外层循环
{
inner,for( int j=0; j<10; j++ ) //内层循环
{
if( i<j )
{
……
continue outer;
}
……
} //内层循环结束
……
} //外层循环结束
for( int i= 0; i <10; i++ )
{
if( i == 5 )
{
continue;
}
……
}
2.7 控制语句 ——程序转移相关语句 continue
return语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行。
返回语句有两种格式:
return expression; //当方法需要返回某种类型数据时
return; //当方法的返回类型为 void时
单独一条 return语句放在方法中间时,会产生编译错误,
因为其后的语句将不会执行到 。 若真需要退出方法,可以通过将 return语句嵌入某些语句 ( 如 if-else) 来使程序在未执行完方法中所有语句时退出 。
2.7 控制语句 ——程序转移相关语句 return
在进行程序设计时,错误的产生是不可避免得。如何处理错误?把错误交给谁去处理?
程序又该如何从错误中恢复?这是任何程序设计语言都必须面对和解决的问题。 Java语言中是通过例外( Exception)来处理错误的。我们将在第六讲中详细介绍例外及其处理。
2.7 控制语句 ——例外处理语句 try-catch-finally,throw