第三章:Java结构语句全套总结
总结:陈大龙
一:Java语句分类
Java语言的语句有如下几类:
空语句
表达式语句
快语句
标号语句
断言语句
选择语句
循环语句
跳转语句
同步语句
列外语句
1.空语句
【空语句仅包含一个分号,不执行任何操作】 eg:for(int i=1;i
【在表达式后加分号形成】 eg:x=x+1;++x;x++;x--。 ---------------------------- 3.块语句
【也叫复合语句,指一组语句用大括号括起来,使其在语法上作为一条语句,且不需要分号结尾】
{
int t=10;
x=t
}
static{ //静态语法块 } ---------------------------- 4.标号语句
【一个语句前放置一个标号即成标号语句】 :;
eg:leap:for(int i=0;i3){ return leap; } } 作用:用来表识语句。主要在break和continue语句上体现
-------------------------- 5.断言语句
【包括一个布尔表达式,用于对程序运行过程的处理提出一个判断】 aert[:]; Java -ea MyCla
二:Java语言有两种选择结构:
(1):if语句,用来实现两个分支的选择结构;
(2):switch语句,用来实现多分支的选择结构;
三:if语句:
if语句的一般形式如下:
if(表达式)
语句1;
或者是:
if(表达式){
语句1;
}
说明:
【1】:if语句中的表达式可以是关系表达式,逻辑表达式,返回的是一个逻辑值,即真或假!表达式类型必须是Boolean型
三:所有形式如下:
(1):单判断语句
if(表达式1)
语句1;表达式类型必须是Boolean型
或者是:
if(表达式1){
语句1;
}
表达式类型必须是Boolean型
(2):双分支语句
if(表达式1)
语句1;
else
语句2;
表达式类型必须是Boolean型
或者是:
if(表达式1){
语句1;
}else{
语句2;
} 表达式类型必须是Boolean型
(3):多分支语句
if(表达式1)
语句1;
else if(表达式2)
语句2;
......
else if(表达式n)
语句n;
else
语句n+1;
表达式类型必须是Boolean型
说明:
【1】:整个语句可以写在多行上,也可以写在一行上;
例子:
if(x>0) y=1;else y=0;
【2】:if语句写在多行上,都是一个整体,属于一个语句。不要误认为if部分是一个语句,else部分是另一个语句。在系统中对if语句编译的时候,还要检查是
否有else语句,如果有else语句,会把它当做if语句的部分;如果没有else语句,则认为if语句已经结束!还要注意else语句不能作为单独语句来结束,它必须和if语句配对使用,而且是和最近的if语句配对,采用就近原则!
【3】:if语句不加大括号,只对第一句代码有约束作用,后面的代码不在约束,会按照顺序往下执行;如果加上大括号会对括号里面的所有代码都有约束作用。
四:选择结构语句的嵌套
if语句的嵌套:在if语句中又包含一个或多个if语句称为if语句的嵌套。
形式如下:
(1):在if语句中再嵌套if语句
if(表达式1){
if(表达式2){
语句1;
}
}
(2):在if语句中再嵌套双分支语句
if(表达式1){
if(表达式2){
语句1;
}else{
语句2;
}
}
(3):在if语句中嵌套多分支语句
if(表达式1){
if(表达式2){
语句1;
}else if(表达式3){
语句2;
}else if(表达式4){
语句3;
}else{
语句4;
}
}
五:用switch语句实现多分支语句
switch语句是多分支选择语句
switch语句作用:根据表达式的值来使流程跳转到不同的语句。
六:一般的形式如下:
(1):无break语句形式
switch(表达式){
case 常量1:
语句1;
case 常量2:
语句2;
case 常量3:
语句3;
default:
语句4;
}
(2):有break语句形式
switch(表达式){
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
case 常量3:
语句3;
break;
default:
语句4;
break;
}
说明:
【1】:switch语句后面的“表达式”,其值的类型应int,byte,short,char最终会转化为 int型【字符型也属于整数形式,按照Unicode码来存储到计算机当中】表达式”,其值的类型不应是long
【2】:switch语句下面的大括号是一个复合语句,一定要打上,不打则会报错!里面是case关键字和default组合的若干语句。case后面的必须跟一个常量,其值的类型应int,byte,short,char最终会转化为 int型【字符型属于整数形式按照Unicode码来存储到计算机当中或是常量表达式。被当做标号作用,用来标识一个位置。
【3】:没有break语句,是按照顺序依次往下执行;有break语句,符合哪一种情况就执行哪一种情况下的语句,之后马上退出整个switch语句。
【4】:switch语句的运行原理:在执行switch语句时,先计算switch后面的表达式的值,然后将它与各个case标号比较,如果与某一个case标号中的常量相同,流程就转到此case标号的后面的语句。如果没有switch表达式
相匹配的case常量。再检查有没有default语句,若有就执行default标号后面的语句,若没有则退出整个switch语句。
【5】:各个case标号出现的次序不影响结果,可以先出现default语句,其他case语句可以打乱。
【6】:每一个case常量必须互不相同,否则会出现矛盾现象,重复定义系统报错!
【7】:在case语句下不需要加大括号,会自动执行case标号语句后面的所有语句!
【8】:多个case标号可以共用一组执行语句。如下:
case \'A\':
case \'B\':
case \'C\':
printf(\"及格了!\\n\");break;
七:多分支选择语句嵌套:
(1):可以在switch中嵌套switch语句
switch(表达式1){
case 常量1:
switch(表达式2){
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
}
break;
case 常量2:
语句3;
break;
}
八:if语句与switch语句综合嵌套使用
(1):可在if语句嵌套switch语句
if(表达式1){
switch(表达式2){
case 常量1:
break;
case 常量2:
break;
}
}
(2):可以在switch语句中嵌套if语句
switch(表达式1){
case 常量1:
if(表达式2){
语句1;
}else{
语句2;
}
break;
}
九:while与do-while语句的格式:
while语句的格式如下:
【1】while(条件表达式)
//循环体
或
【2】while(条件表达式){
//循环体
}
【1】:while后面必须加小括号,里面填入的表达式可以是任何类型的表达式,返回的一定是逻辑值,非真即假;循环体是一句代码的话,可以不要大括号
【2】:while后面必须加小括号,里面填入的表达式可以是任何类型的表达式,返回的一定是逻辑值,非真即假;循环体是多行代码的话,需要加上大括号
do-while语句的格式如下:
do{
//循环体
}while(条件表达式);
【1】:do-while语句,do和while结合一起,必须加上大括号,在while语句括号里填入条件表达式,在括号后面一定要加\";\" (分号).
十:do-while和while语句的区别:
【1】:格式区别
while语句可以不加大括号,但do-while一定要加大括号;而且do-while语句while括号后面一定要加\";\"(分号结束)。
【2】:执行区别
while语句是先判断条件再执行循环体;do-while语句先执行循环体再判断条件。
在条件都为真的时候,他们都执行一次,但条件为假的时候,do-while语句比while语句多执行一次。
例子:
package src; public cla ngf { public static void main(String[] args) { {
int i=2;
int j=2;
while(i
i++;
}
System.out.println(\"while语句:
\"+i);
do{
j++;
}while(j
System.out.println(\"do-while语句:\"+j);
} }
【运行结果是:2
可以看出条件为假的时候,do-while语句比while语句多执行一次】
十一:for循环语句的格式
for语句的一般表达式:
for(表达式1;表达式2;表达式3)==for(循环变量赋初值;循环条件;循环步长控制值)
表达式1:初始化表达式(设置初始条件,只执行一次。可以为0个,一个或多个变量设置初始值)
表达式2:循环条件表达式(循环判断条件,看是否继续执行)
表达式3:循环变量控制表达式(在执行完循环体后,自增或自减)
for循环语句的多种形式【求1加到100的算法表现形式】 }
(1):for语句的一般形式
int i;
int s=0;
for(i=1;i
s=s+i;
}
或者是:
int s=0;
for(int i=1;i
s=s+i;
}
【一般表达式是三个表达式都写完整,可以在初始化表达式里直接声明定义并赋初始值】
(2):表达式1,可以忽略,但后面的分号不能忽略
int i=1;
int s=0;
for(;i
s=s+i;
}
【初始化表达式可以不写,但要在前面声明定义赋初始值】
(3):表达式2,可以忽略,但前后两个分号不能忽略
int s=0;
for(int i=1;;i++){
if(i>100){
break;
}else{
s=s+i;
}
}
【条件表达式可以忽略,但整个循环语句没有限制条件,就会是死循环,所以需要加控制语句break】
(4):表达式3,可以忽略,但第二个分号不能忽略
int i;
int s=0;
for(i=1;i
s=s+i;
i++;
}
【循环变量控制表达式可以忽略,但需要在循环体里面加上循环变
量控制表达式,一定要在循环体后面加,因为按照for循环语句运行机制,先执行循环体再自增或自减】
(5):表达式1 和 表达式2 可以忽略
int i=1;
int s=0;
for(;i
s=s+i;
i++;
}
【初始化表达式和循环变量控制表达式都可以忽略,其中初始化表达式要在前面进行声明定义,循环变量控制表达式要在循环体后面写】
(6):三个表达式全部忽略
int i=1;
int s=0;
for(;;){
if(i>100){
break;
}else{
s=s+i;
i++;
}
}
【三个表达式全部忽略话,就会出现死循环,需要在循环体加上控制条件】
(7):表达式1可以是其他表达式(非循环变量初始表达式可以是与循环变量无关的表达式)
int i=1;
int s;
for(s=0;i
s=s+i;
}
【初始化表达式1中可以是其他表达式,但需要在前面进行声明定义与赋初值】
(8):初始化表达式1和循环变量控制表达式3可以是多个变量
int i;
int j;
int s=0;
for(i=1,j=3;i
s=s+i;
}
【初始化表达式和循环变量控制表达式可以是多个变量,但要用逗号来隔开,起作用也是自增自减】
9):不可以是多个条件表达式, int i; int j; int s=0; for(i=1,j=2;i
10):循环变量控制表达式可以是多个 int i; int s=0; for(i=1;i
【条件表达式中不可以是多个,系统会报错】 (
int i;
int s=0;
for(i=1;i
s=s+i;
}
【循环变量控制表达式可以是同一个的多个,相当于叠加有等同效果】
十二:死循环
(1):
for(;;)
(2):
while(真){
}
(3):
do{
}while(真);
(4):
for(int i=1;;i++){
}
【1和4只要没有条件表达式,就是死循环,因为他没有条件来结束整个循环;;2和3只要条件满足为真的时候就会出现死循环!是死循环是后面不可加输出语句!!!!!!】
十三:表达式语句 3.4.1:return语句
return语句是否带表达式,要根据方法定义中指定的返回类型而定。如果指定的返回类型为void ,那么方法中的return语句,不应该带表达式。反之则需要。
3.4.2 break语句
不代标号的break语句只能出现在循环语句中,或开关switch内;
带标号的break语句,既可以出现在循环语句中或开关语句中,也可以出现在块语句中。
标号是这些循环语句,开关语句,或块语句的标号。此时,break的作用是跳出有标号标识的那个循环语句,开关语句或块语句。使程序继续执行后面的语句。
3.4.3 continue语句
continue语句只能出现在循环体内。其功能是跳出循环体的剩余代码,或者说,
continue语句作用是结束循环体的本次执行。 准备进入循环体的下一次执行。 不带标号时,continue语句的作用对象是包含他的最内层循环语句。
十四:从控制台获取输入:
可以借助java.util包中的Scanner类,实现从控制台获取输入数据。具体方法是创建一个Scanner类的一个实例对象,比如:
Scanner scanner=new Scanner(System.in);
其中,new表达式需要用标准输入流对象System.in作为参数;然后再调用Scanner型对象的有关方法获取输入数据。
Scanner类定义了Scanner型对象的一系列方法,其中用于获取数据的常用方法包括:
next()
获得一个字符串 nextInt()
获得一个int型整数 nextDouble()
获得一个double型浮点数 nextBoolean()
获得一个boolean型数据