《Java基础复习》-控制执行流程
最近任务太多了,肝哭我了,boom
参考书目:Thinking in Java
《Java基础复习》-控制执行流程
Java使用了C的所有流程控制语句
涉及关键字:if-else、while、do-while、for、return、break
一、true和false
所以条件语句都利用条件表达式的真假来决定执行路径
Java不允许将数字作为布尔值(某些语言中,真是非零,假是0),原因是因为boolean是一种特殊数据类型,不为数字,也不为字符
二、if-else
几种形式:if 、if-else 、if-else if-else(else if 不为新关键字)
注意的点:书写的形式,作用域
2.1 使用
if(逻辑表达式){
//操作
}
if(逻辑表达式){
//操作
}else{
//操作
}
另外还有一种else if
if(逻辑表达式){
//操作
}else if(逻辑表达式){
//操作
}else{
//操作
}
我们看到一个新词汇 else if,这并不是新关键字,而仅仅是else后面紧跟一个新的if语句
三、迭代
while、do-while和for用来控制循环,有时候将它们划分为迭代语句。语句会重复执行,直到起控制作用的布尔表达式得到false(假)的结果为止。同时相对于C语言,Java扩充了foreach遍历
3.1while
while(Boolean-expression){
statement;
}
循环开始时,会计算一次布尔表达式的值,为真就运行,运行完语句后,在每一轮新的循环前都会先判断布尔表达式
3.2do-while
格式:
do{
statement;
}while(Boolean-expression)
在该循环语句中,会先执行一次操作,然后进行判断,为真就继续循环
3.3for
格式:
for(initialization;Boolean-expression;step){
//statement
}
初始化(initialization)表达式、布尔表达式(Boolean-expression),或者步进(step)运算都可以为空。
每次迭代前会测试布尔表达式,若为真就执行循环语句,为假就终止,然后执行for后的语句。
执行步骤:
举例
//输出10个随机数
for(int i=0;i<10;i++){
//字符串在前,+号运算符重载为字符串操作符
System.out.println("随机一次的结果:"+Math.random());
}
该循环用到了Math库中static(静态)方法random(),该方法可以产生**0和1之间(包括0,不包括1)**的一个double值。
3.4逗号操作符
非逗号分隔符!Java中唯一用到逗号操作符的地方就是for循环的控制表达式。在控制表达式的初始化和步进控制部分,可以使用一系列逗号分隔的语句;而且那些语句都会执行。
public class Common {
public static void main(String[] args){
for(int i=0,j=i+1 ; i<5 ; i++, j = i*2 ){
System.out.println("i="+i+"j="+j);
}
}
}
3.5Foreach语法
JavaSE5引入了一种更新的更加简洁的for语法用于数组和容器,即foreach语法,表示不必创建int变量去对由访问项构成的序列进行计数,foreach将自动生产每一项。
举例
public class Common {
public static void main(String[] args){
Random rand = new Random(47);
float f[] = new float[10];
for(int i=0; i<10 ; i++){
f[i] = rand.nextFloat();
}
for(float x : f){
System.out.println(x);
}
}
}
3.6return break & continue
return会直接结束方法
break会停止当前所在的循环
continue会直接进入下一轮循环
3.7Java没有goto
goto虽然是Java的保留字,但是goto并没有在Java中使用,goto的滥用会导致很多问题,如结构模糊,混乱,隐藏bug等等。
虽然Java没有使用goto的功能但是Java中也能完成一些类似跳转的操作,这是使用break与continue实现的
break操作停止外部循环
break [flag]; 结束带有[flag]标记层到本层的所有循环。
当break intcast;执行后,被intcast标记的循环也会停止
public class Example{
public static void main(String[] args){
int x= i,j;
intcast: for (i=1;i<=9;i++) {
for (j=1;j<=i;j++) {
if (i>4) {
break intcast;
}
System.out.print("*");
}
System.out.print("\n");
}
}
continue跳转语句
continue[flag]; 我们可以这样理解,在未加flag的情况下,continue进入当前循环的下一轮循环。假如循环有两次及以上,在外层循环加了flag标记后,执行continue flag;的结果是停止当前一轮的循环,持续停止,直到被标记那一层,然后进入被标记一层的下一轮循环。
public class Example{
public static void main(String[] args){
int x= i,j;
intcast: for (i=1;i<=2;i++) {
for (j=1;j<=3;j++) {
if (i=1&&j==2) {
continue intcast;
}
System.out.print(i+","+j);
}
System.out.print("\n");
}
}
/*
输出的结果是
1,1
2,1
2,2
2,3
*/
可以看到少了1,2 1,3这两项,是因为运行到1,2时,运行了continue ,进入了外层循环的下一轮,也就是2,1
3.8switch
switch有时也被划分为选择语句,switch可以根据表达式的值,从一系列代码中选出一段去执行
格式
switch(integral-selector) {
case integral-selector1 : statement1; break;
case integral-selector2 : statement2; break;
case integral-selector3 : statement3; break;
case integral-selector4 : statement4; break; default: statement5;
}
注意:java只能对int和char类型进行选择
这是传统的switch写法,该结构会选择对应的值进行执行对应的语句
break的作用
break在传统写法中,起到了让语句停止的作用,但是break并不是必须的,若没有写break,将继续按顺序执行下去。比如选择器选择在了integral-selector2,那么执行的顺序是statement2->statement3->statement4->statement5,除非中间遇到了break;