从零学Java(5)——控制流
03 December 2013
最近这两篇“从零学Java”并没有涉及特别难的问题,都是些需要特殊注意的地方,但是写起来也没有那么容易。今天动手研究了一下Android,折腾来去算是开了个头,下图是用我的kindle fire做的测试,当然还有那卡的要死的模拟器。这个例子是根据《Google Android开发入门指南》一步步得来,其中也遇到了很多问题,好在都解决了。
控制流也是各种语言都会涉及到的,想当年if-else还刚从lisp流行开来,现在已经有超过百种的编程语言,不得不说时间这把杀猪刀真“狠”。今天也说说Java中那些比较特别的用法。
Foreach
举个例子,很好理解:
for (int i = 0; i < 10; i++)
f[i] = rand.newtFloat();
for (float x : f)
System.out.println(x);
其实就是用简单的方法实现遍历整个数组。再来一个有趣的用法:
for (char c : "hello world".toCharArray())
System.out.print(c + " ");
打印结果:
h e l l o w o r l d
toCharArray()方法使得字符串返回一个字符数组。
标签
自从Dijkstra发表了那著名的论文后,goto一直被认为是糟糕的编程方法,因为它使得程序复杂化,难以理解。感觉不能因为刀能杀人就认为刀有害,其实工具好不好在于其如何使用。尽管Java没有引入goto,但它保留了“标签”,与goto类似:
label:
在Java中,标签起作用的唯一地方刚好是在迭代语句之前。“刚好之前”的意思是说,在标签和迭代之间置入任何语句都不好。其常常和continue、break组合用:
label:
outer-iteration {
inner-iteration {
//...
break;(1)
//...
continue;(2)
//...
continue label;(3)
//...
break label;(4)
}
}
- (1) 与其他语言一致,break中断内部迭代,回到外部迭代。
- (2) 与其他语言一致,continue使执行点移回内部迭代的起始处。
- (3) continue label同时中断内部迭代和外部迭代,直接转到label处;随后,继续执行迭代过程,从外部迭代开始。要注意“中断”的意思,相当于从标签处开始再次执行,但之前的变量依然是“中断”前的数值,不重新开始(特殊情况除外)。
- (4) break label同时中断内部迭代和外部迭代,直接转到label处;但随后不再进入标签所指向的迭代,这里是outer-iteration迭代,当然外面进不去,里面的就更进不去了。
switch语句
switch语句基本用法与C/C++相似,但其选择因子必须是int或char那样的整数值。到底什么区别?感觉类什么的就别拿来当选择因子了吧。(选择因子即switch后面紧跟的需要判断的因子)
今天写的有点短,明天再接再厉!
blog comments powered by Disqus