黑马程序员_java自学学习笔记(二)----流程控制语句
android培训、 java培训、期待与您交流!人生就如同程序,每天按照既定的轨道走,每到遇到问题的时候就要进行选择,然后在不同的领域重复做不同的事,直到下一次选择的出现。人生大体就是由这样的机制组成的,丰富多彩的是内容,而抽象过程是很简单的也是很枯燥的。程序就是由以上人生的3个过程抽象出来的过程组成的,即顺序结构、分支结构、循环结构三大结构构成,所有的编程语言目前都具备也必须具备这样的流程控制方式。java也不例外。
一、顺序结构
程序从main函数进入,一步一步的向下执行,就是顺序结构。没有特殊词,没有特殊标示,完全按照既定步骤执行。遇到不认识的东西找相应文件,完事以后该进堆的进堆,该入栈的入栈。顺序结构是最基本的结构,没有特别的,没有要注意的。
二、分支结构(含:选择结构)
(1) if(条件表达式) {
语句块A;
}
其中"条件表达式"是一个可以求解的一个式子,并且结果一定要是boolean型的值。boolean值只有true和false两个,下面所有的“条件表达式”都是该意思。
该式子意思是如果"表达式"的值是真的,那么执行语句块A,否则跳过语句块A直接向下执行。
(2) if(条件表达式){
语句块A;
} else{
语句块B;
}
该式子说明条件表达式为真,则执行A语句块,如果为假,则执行语句块B。也就是说,不管结果如何,必然有且只有一个语句块被执行。与(1)不同的是,如果语句块A的大括号下面接B语句块,那么,当表达式为假时,执行结果完全一样,跳过语句块A执行B;如果表达式为真时,那么执行完语句块A后,必然执行语句块B。
(3) if嵌套
if(条件表达式1) {
语句块1;
}
else if(条件表达式2) {
语句块2;
}
else if(条件表达式3) {
语句块3;
}
…… ……
else if(条件表达式n-1) {
语句n-1;
}
else {
语句块n;
}
该语句对于选择比较多的情况下使用,系统会逐条判断条件是否成立,如果成立立即执行代码块,否则跳过代码块。从语句块1到语句块n,有且只有一个会被执行到。
(4) 选择语句switch:
switch(表达式){
case const1:
statement1;
break;
case const2:
statement2;
break;
…… ……
[default:
statement default;
break;]
}
该处的"表达式",不一定是条件表达式,具体的讲,一般用到switch语句,表达式一定不是一个条件表达式,是一个可判断值的变量,下面的const是表达式可能出现的值,冒号后面是当出现这样的值的时候要执行的动作。default是可选的,可以不填,default里面的代码是当表达式判断过上面所有的值之后,如果都没有符合的,就执行default里面的代码。
我记得在某本书上看到过,不建议使用switch,因为貌似switch语句运行时,需要首先加载所有代码块,而比较耗内存,而if是先行判断,如果通过才加载相应的代码块,由于无法寻找,自己又不太确定,望看到的路过的懂的大神在留言里帮忙指正。
另:千万不能忘记break语句,否则程序会从执行完的第一条开始,向下执行所有符合条件的语句。
三、循环结构
(1) 当型循环:
while(条件表达式) {
代码块A;
}
当条件表达式为真时,执行A,执行完毕以后再次判断条件表达式,如果继续为真,则重复执行代码块A的操作,反复执行,到判断条件表达式为假时,跳过代码块A,执行下面的语句。
(2) 直到型循环:
do {
代码块A;
} while (条件表达式);
执行代码块A,然后判断条件表达式是否成立,如果成立,回到do继续执行A,直到表达式的值为假,继续向下执行。
(1)、(2)两种循环的根本区别在于,(1)型循环先判断表达式真假,如果为假,直接跳过循环;(2)型循环,不管怎样先执行一遍代码块,再判断真假,代码块至少会被执行一遍。各种循环有各种循环的用处,不过个人还是比较喜欢(1)型循环,也就是当型循环,因为该循环安全性比较好。在后期使用迭代器(Iterator)遍历集合的时候,如果集合为空,那么第二种循环容易报错,而第一种不会有问题。
(3) 万能循环for:
for(表达式1;条件表达式; 表达式2) {
代码块A;
}
"万能循环"是我取的名字,这名字不规范,但是确实是功能最强大的一个循环语句。运行顺序是,执行表达式1,判断条件表达式,如果为真,执行代码块A,执行过后执行表达式2,然后再判断条件表达式,直到条件表达式为假,循环结束。
表达式1一般是循环控制变量的赋值,表达式2一般是对循环控制变量的改变,使其可以使条件表达式为假。
for循环之所以强大,是因为不管怎么写这个循环,它的执行顺序不变,表达式1执行一次,表达式2在每次循环体结束后执行,供n次,也就是循环次数;条件表达式会执行n+1次判断。这样就出现了很多用法,也就是各个表达式可以省略,但是循环体中一定要有判断和结束循环的方法。另外,表达式可以写成与循环完全没有关系的式子,只要确定自己的式子,放在表达式1的位置的是需要执行1次的,条件表达式位置的需要执行n+1次的,表达式2的位置的是需要执行n次的就都可以(但这用不好是很危险的,容易形成死循环)。
三、break和continue
(1) break
break主要针对循环(当然也有例外,比如刚刚的switch),目的是直接跳出循环,执行循环代码块后面的内容。
(2) continue
continue直接针对循环,执行continue以后忽略continue后面所有的代码,直接跳回到循环开始,继续下一次的循环。
以下是实例,实例摘自http://zhidao.baidu.com/question/13181586.html:
public class BreakTest { public static void main(String args[]) { System.out.println("循环没有开始"); System.out.println("现在开始测试continue"); for (int i = 0; i < 3; i++) { System.out.println("开始第" + i + "次for循环"); if (i == 1) { continue; } System.out.println("看看continue后这里执行了吗?"); } System.out.println("continue测试完毕\n***********************"); System.out.println("现在开始测试break"); for (int i = 0; i < 3; i++) { System.out.println("开始第" + i + "次for循环"); if (i == 1){ break; } System.out.println("看看break后这里执行了吗?"); } System.out.println("break测试完毕\n***********************"); } }