Chapter4_控制执行流程
总结java中所有的与流程控制有关的知识
(1)表达式判断
Java中只允许true或者false来作为判断条件,不允许用0或者非0值作为判断条件。
(2)if-else
与流程密切相关的语句,决定了语句应该往哪个方向发展,与代码的逻辑结构密切相关。
(3)迭代
下面的语句被划分为迭代语句。
(A)while/do-while
两者的唯一区别就是do-while中的语句至少会被执行一次,即是表达式里面的值一开始计算就是false。但对于while,如果第一次计算的结果是false,则循环体里的语句不会执行。
(B)for
for循环中要注意的首先是,初始化表达式,布尔表达式,步进运算都可以为空。另外一个就是for循环是Java中唯一用到了逗号操作符的地方,在控制表达式的三个部分中,可以使用一系列由逗号分隔的语句,并且这些语句会独立执行。在一个控制表达式中,定义多个变量的能力只限于for循环使用。
(C)foreach语法
foreach语法不必要创建int变量去对由访问项构成的序列进行计数。例如如下的几个例子。
分开输出一个字符串中的所有字符:
public class test {
public static void main(String[] args){
String s = "don't look back in anger";
for(char c : s.toCharArray())
System.out.print(c + " ");
}
} output:
d o n ' t l o o k b a c k i n a n g e r
foreach语法不仅能够节省时间,更重要的是能够努力说明你正在做的事情,比如把数组中的每一个元素都获取出来。
(4)return
return语句指明你希望在何处让方法返回或者退出,或返回一个什么样的值。
(5)break和continue
break退出当前的迭代,continue退出当前这一次迭代然后开始进行下一次迭代。
(6)goto与标签
在Java中,实际上没有goto语句的支持,但是Java中有类似的机制存在,即标签。在Java中,标签唯一起作用的地方是在迭代语句之前,这句话的内涵在于,在标签和迭代语句之间插入任何语句都是不合适的。几种label的行为机制如下。
label1:
outer-iteration{
inner-iteration{
break; (1)
continue; (2)
continue label1; (3)
break label1; (4)
}
}
在(1)中,break中断内部迭代,回到外部迭代。(2)中,continue中断当前内部迭代,继续进行当前内部迭代。(3)中,continue中断当前迭代,重新从label1处进入外部迭代。(4)中,break中断所有迭代,并且不再进入外部迭代。下面是一个label用于for循环的例子。
public class test {
public static void main(String[] args){
int i = 0;
outer:
for(;true;)
inner:
for(;i < 10; i++){
System.out.println("i = " + i);
if(i == 2){
System.out.println("continue");
continue;
}
if(i == 3){
System.out.println("break");
i++;
break;
}
if(i == 7){
System.out.println("continue outer");
i++;
continue outer;
}
if(i == 8){
System.out.println("break outer");
break outer;
}
for(int k = 0;k < 5; k++){
if(k == 3){
System.out.println("continue inner");
continue inner;
}
}
}
}
}
这个例子中一个有趣的地方是,如果将15行的i++注释掉的话,程序会陷入死循环。这告诉我们在for循环体中,循环中的代码执行完后的最后一句才是步进操作,如果在之前用break语句退出循环,步进操作不会执行。细心的话可以发现在11行的continue之前并没有手动给i进行步进,但是步进操作还是进行了,这说明单个的continue在进行下一次内层循环的同时仍然可以进行自增操作。但是21行的continue加标签的上一句,需要手动给i进行步进,这是因为这种continue的形式不会继续进行循环体中的步进操作了,而是直接跳转到标签代码处。
规则总结为:
(1)单个的continue会终止当前循环并且回到内层循环的头部重新开始(步进,判断等操作仍然会执行)。
(2)continue后跟标签会无条件跳转至标签处。
(3)单个的break会终止并且跳出当前循环(只能跳出内层)。
(4)break加标签可以中断并跳出标签所指的循环。
(7)switch
switch更多的时候被划分为一种选择语句,根据整数表达式的值,switch语句可以从一系列代码中选择一段执行。
switch的标准格式如下:
switch(integral-selector){
case integral-value1 : statement : break;
case integral-value2 : statement : break;
case integral-value3 : statement : break;
case integral-value4 : statement : break;
case integral-value5 : statement : break;
default: statement;
}
其中,integral-selector称作整数选择因子,是一个能够产生整数值的表达式,switch语句将这个值与每一个integral-value比较,如果发现相等的,就选择执行,否则就执行再default里面的语句。每个case都以一个break结尾,如果有这个break存在,程序会在结束时跳出switch结构体,反之会继续进行,直到遇到一个break为止。switch是一个实现多路选择的有利工具,但是只能使用char或者int这样的整数值,但是与enum相联系可以减弱这种限制。
下面是一个使用switch的例子。
public class test {
public static void main(String[] args){
String s = "though nothing can keep us together";
for(char c : s.toCharArray()){
switch(c){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':System.out.println(c + " is vowel");
break;
default:System.out.println(c + " is not vowel");
}
}
}
}
多个case可以重叠在一起,形成多重匹配,只要符合那些条件中的一种,就会执行那一段代码。
Chapter4_控制执行流程的更多相关文章
- 大家一起和snailren学java-(三) 操作符&控制执行流程
“又是新的一周,感觉要学的东西还有好多,加油.由于第三章和第四章内容要总结的不是很多,没太多需要拿出来说的,就整合到一个帖子好了” 操作符 操组符,什么是操作符?其实就是+-*/=&^~| 等 ...
- java控制执行流程
控制执行流程 欢迎转载,转载烦请注明出处,谢谢. https://www.cnblogs.com/sx-wuyj/p/11177257.html java当中涉及到的关键字包括if-else.whil ...
- 《Java基础复习》-控制执行流程
最近任务太多了,肝哭我了,boom 参考书目:Thinking in Java <Java基础复习>-控制执行流程 Java使用了C的所有流程控制语句 涉及关键字:if-else.whil ...
- [Java编程思想-学习笔记]第4章 控制执行流程
4.1 return 关键字return有两方面的用途:一方面指定一个方法结束时返回一个值:一方面强行在return位置结束整个方法,如下所示: char test(int score) { if ...
- 控制执行流程——(Java学习笔记三)
if-else 控制程序流程最基本的形式 格式: if(boolean - expresion){ statement } 或 if(boolean - expresion){ stateme ...
- Java编程思想之四控制执行流程
程序必须再执行过程中控制它的世界,并做出选择.在Java中,你要使用执行控制语句来做出选择. 4.1true和false 所有条件语句都利用条件表达式的真或假来决定执行路径. Java不允许使用数字作 ...
- Java编程思想--控制执行流程
java控制流程设计的关键字包括if-else,while,do-while,for,return,break,continue以及switch.(go-to) 1.while在迭代之前计算一次布尔表 ...
- ThinkingInJava 学习 之 0000003 控制执行流程
1. if-else 2. 迭代 1. while 2. do-while 3. for 4. 逗号操作符 Java里唯一用到逗号操作符的地方就是for循环的控制表达式. 在控制表达式的初始化和步进控 ...
- Java编程思想学习(四)----第四章:控制执行流程
在Java中,涉及的关键字包括if-else.while.do-while.for.return.break 以及选择语句switch.然而,Java并不支持goto语句(该语句引起许多反对意见,但它 ...
随机推荐
- 4-17疑难点 c语言之【结构体对齐】
今天学习了结构体这一章节,了解到了结构体在分配内存的时候采取的是对齐的方式 例如: #include<stdio.h> struct test1 { int a; char b; shor ...
- java委托
上文讲过观察者模式,尽管已经用了依赖倒转原则,但是"抽象通知者"还是依赖"抽象观察者",也就是说万一没有了抽象观察者这样的接口,通知的功能就完不成了.另一方面, ...
- ReactiveX 学习笔记(26)使用 RxJS + React.js 调用 REST API
JSON : Placeholder JSON : Placeholder (https://jsonplaceholder.typicode.com/) 是一个用于测试的 REST API 网站. ...
- Post返回json中文乱码
来源:http://blog.csdn.net/xiaoxuonl/article/details/54315612 服务器返回的是utf-8,jsp页面上也是utf-8,数据库也是utf-8怎么就是 ...
- 交叉熵理解:softmax_cross_entropy,binary_cross_entropy,sigmoid_cross_entropy简介
cross entropy 交叉熵的概念网上一大堆了,具体问度娘,这里主要介绍深度学习中,使用交叉熵作为类别分类. 1.二元交叉熵 binary_cross_entropy 我们通常见的交叉熵是二元交 ...
- tensorflow,model,object_detection,训练loss先下降后递增,到几百万,解决tensorflow,model,object,detection,loss,incease
现象:训练loss一开始下降一部分,跌代到若干次(具体多少和你的learning rate大小有关,大就迭代小就发生,小就需要多几次迭代) 日志如下(下面的日志来源于网络,我自己的日志已经clear掉 ...
- 1、let const
1.作用域的概念 es6之前 es5 分为 全局作用域 函数作用域 es6 新增块级作用域 2.let const 与 var 区别 用var 可以无报错 此代码报错 引出 块级作用域 用 {} 包起 ...
- Xamarin.Form怎么调用原生方法
---恢复内容开始--- Xamarin.Form怎么调用原生包 今天我想和大家分享的是有关Xamarin如何调用安卓的原生代码,下面的例子以大家可能会经常用到的微信WX方法的调用. 首先我们新建一个 ...
- LVS+nginx负载均衡知识点1
lvs+nginx负载均衡 1 学习目标 掌握什么是负载均衡及负载均衡的作用和意义. 了解lvs负载均衡的三种模式. 了解lvs-DR负载均衡部署方法. 掌握nginx实现负载均衡的方法. ...
- vue 自定义组件销毁
今天在开发电商vue前端项目时,用户每次登出再换其它用户登录时,页面显示的用户名和左则导航都还是上个用户的,刚开始以为是localStorage中没有清除全局数据,然后在用户点击退出系统时手动清除lo ...