TIJ读书笔记02-控制执行流程

所有条件语句都是以条件表达式的真假来决定执行路径,也就是通过布尔测试结果来决定程序的执行路径. 由于java中布尔类型的特殊实现,如果想在布尔测试中测试一个非布尔值,必须将其转换成布尔表达式.
也就是说像C和C++中的while(1)这种方式是不可以的.

if-else

if-else有两种:

if(boolean statment){
statments;
} if(boolean statment){
statments;
}else{
statments;
}

那说else if呢,TIJ中解释,else if的实现就是else语句后紧跟了一个if语句. 不知道底层是不是这样的实现的,但是这样理解起来貌似更简单了呢.

迭代

迭代有三种,for,do-while,while. 迭代语句会重复执行,知道起控制作用的布尔表达式得到”false”的结果为止.
do-while和while
do-while和while的区别在于,do-while中的语句至少会执行1次.即使第一次表达式就被计算为false.

do{
statments;
}while(boolean statment); while(boolean){
statments;
}

for
for循环,在第一次迭代之前会进行一个初始化,随后进行条件测试,且在每一次条件测试之后再进行一步某种形式的步进.

for(initialization;Boolean-expression;step){
statments;
}

逗号操作符.java中唯一用到逗号操作符的地方就是for循环的控制表达式.比如:

    @Test
public void test1(){
for(int i=0,j=i+10;i<5;i++,j=i*2){
System.out.println("i="+i+" j="+j);
}
}

froeach
在java1.5之后,终于引入了foreach,foreach可以更方便的作用于数组和容器. forerach不需要创建int变量去对被访问对象构成的序列进行计数.foreach将自动的产生每一项.

    @Test
public void test2(){
int[] arrayInt={1,2,3,4,5};
List<Integer> listInt = new ArrayList<>();
listInt.add(1);
listInt.add(2);
listInt.add(3);
listInt.add(4);
listInt.add(5); for(int eachInt:arrayInt){
System.out.print(eachInt+" ");
}
for(int eachItem:listInt){
System.out.print(eachItem+" ");
}
}

无条件分支

java中有几个关键字表示unconditional branching,叫做无条件分支.比如return,break,contine
return
return作用有两个:

  • 退出一个方法
  • 退出时,返回某个值.

返回值类型为void的方法,并没有返回值,但是方法末尾会有一个隐式的return;

break和contine
break和contine都是用来控制循环流程的. break用来退出当前循环,contine用来停止当前循环,然后回到循环的起点继续下次循环.

关于标签和goto
goto最早起源于汇编语言的程序控制,这在汇编中是很常见的. 而goto是源码级别的跳转,据说会导致程序的逻辑混乱. 从我上学那会儿goto就成了伊甸园禁果,各种教材资料上都说,这是个很危险的玩意儿,不要用. 错的不是goto而是goto语句的提供导致标签的滥用.

java中限制标签只能用在continue和break之后,它实际不是一个跳转,而是中断迭代语句的一种方法.

label1:
outer-iteration{
inner-iteration{
//...
break;//这里的break会退出内部迭代,返回到外部迭代中去
//...
continue;//这里会使执行点移到迭代的起始处
//...
continue label1;//同时中断内部和外部迭代,返回label1处,随后从外部迭代开始继续
//...
break label1;//中断所有迭代,返回label1处,之后不再进入.
}
}
    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;
}
}
}
}
}
/*
//out:
i=0
continue inner
i=1
continue inner
i=2
continue
i=3
break
i=4
continue inner
i=5
continue inner
i=6
continue inner
i=7
continue outer
i=8
break outer
*/
@Test
public void test1(){
int i =0;
outer:
while(true){
i++;
if(i==5){
System.out.println("continue outer");
continue outer;
}
}
}

switch语句

switch必须使用int或者char类型来做选择因子. 但是通过enum可以弱化这一限制.

    public static void main(String[] args) {
Random rand = new Random(47);
for(int i =0;i<100;i++){
int c = rand.nextInt(26)+'a';
System.out.print((char)c +" ,"+c+": ");
switch(c){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
System.out.println("vowel");
break;
case 'y':
case 'w':
System.out.println("sometimes a vowel");
break;
default: System.out.println("consonant");
}
}
}

一个小例子 不多说.

TIJ读书笔记02-控制执行流程的更多相关文章

  1. TIJ读书笔记06-终结清理和垃圾回收

    TIJ读书笔记06-终结清理和垃圾回收 finalize()方法 垃圾回收器如何工作 java的垃圾回收是由jvm来控制的.所以需要java程序员参与的部分不是很多. 但是在这里需要明白一点,java ...

  2. 《The Linux Command Line》 读书笔记02 关于命令的命令

    <The Linux Command Line> 读书笔记02 关于命令的命令 命令的四种类型 type type—Indicate how a command name is inter ...

  3. TIJ读书笔记01-操作符

      TIJ读书笔记01-操作符 概述 关系操作符和逻辑操作符 位操作符 类型转换 概述 操作符 操作符接受一个或多个参数,并生成一个新值. 换句话说操作符作用于操作数,生成一个新值.有些操作符会改变操 ...

  4. TIJ读书笔记08-数组的初始化和可变长参数形参

    TIJ读书笔记08-数组的初始化和可变参数形参 数组 数组的声明 数组的初始化和赋值 可变参数列表 数组 相同类型的,用一个标识符名称封装到一起的一个对象序列或者基本数据类型序列叫数组.(多么严谨的概 ...

  5. TIJ读书笔记05-this关键字

    TIJ读书笔记05-this关键字 概述 this的用法 static方法 概述 两个对象同时调用一个方法,那么jvm怎么知道是哪个方法调用的呢. 我们在书写的时候会写成a.fun(1) 或者b.fu ...

  6. TIJ读书笔记04-方法重载

    TIJ读书笔记04-方法重载 为什么会有方法重载 方法签名 如何区分重载 关于基本类型的重载 为什么会有方法重载 OOP的编程方式就是让程序的逻辑更加接近现实世界的逻辑. 而在现实世界中,自然语言本身 ...

  7. 大家一起和snailren学java-(三) 操作符&控制执行流程

    “又是新的一周,感觉要学的东西还有好多,加油.由于第三章和第四章内容要总结的不是很多,没太多需要拿出来说的,就整合到一个帖子好了” 操作符 操组符,什么是操作符?其实就是+-*/=&^~| 等 ...

  8. 强化学习读书笔记 - 02 - 多臂老O虎O机问题

    # 强化学习读书笔记 - 02 - 多臂老O虎O机问题 学习笔记: [Reinforcement Learning: An Introduction, Richard S. Sutton and An ...

  9. TIJ读书笔记03-初始化和构造器

      TIJ读书笔记03-初始化和构造器 初始化和清理是涉及安全的两个问题,如果对象不能正确的初始化会引起很多错误,比如空指针异常等,如果不能恰当及时的清理,会占用过多资源. 构造器在创建一个类的实例的 ...

随机推荐

  1. Servlet 客户端 HTTP 请求

    当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的.您可以查看 HTTP 协议 了解更多相关信息. 以下是来自于浏 ...

  2. arm-linux字符设备驱动开发之---简单字符设备驱动

    一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 1.字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面 ...

  3. Shader 优化笔记

    如果shader中采了深度图,但是实际上相机没开深度图的话,会严重降帧. 做uv动画时应该 o.uv1.xy = v.uv * _Layer1_ST.xy + frac(_Layer1_ST.zw * ...

  4. SlidingMenu官方实例分析2——BaseActivity

    本文从BaseActivity说起,因为其他功能页面都继承了这个类. 这里继承了Sliding中的SlidingFragmentActivity,其实也可以继承SlidingActivity, 但是现 ...

  5. VC++ 得到的函数地址与实际函数地址不一致的原因。

    我想试验一个计算汇编指令长度的代码是否正确,因而写了如下code进行验证,但结果非常奇怪 #include <stdio.h> #include <Windows.h> int ...

  6. 1249 Problem Q

    问题 Q: 比大小 时间限制: 1 Sec  内存限制: 128 MB 提交: 159  解决: 66 [提交][状态][讨论版] 题目描述 给你两个很大的数,你能不能判断出他们两个数的大小呢? 比如 ...

  7. 【网络优化|渣速必看】合理设置MTU,提升网络速度

    可能很少网友注意过“本机.网络”的“MTU”值对自己网络性能产生的影响.对于追求更快的下载速度来说,MTU值设置不当,就仿佛穿着高跟鞋跑步一般. MTU是什么? “MTU=最大传输单元 单位:字节” ...

  8. 微信小程序结构分析

    1.Console页面:控制台信息页两个作用: (1)开发直接输入代码并且进行调试: (2)显示小程序的错误输出: 2.Sources页面:源文件调试信息页,用于显示当前项目的脚本文件. 3.Netw ...

  9. Android开发:拖拽

    google官网的training和API两个地方都提到了拖拽的实现,两种方法不太一样. 方法一 training(https://developer.android.com/training/ges ...

  10. 【BZOJ2882】工艺 后缀自动机

    [BZOJ2882]工艺 Description 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的 ...