程序控制流程
1 、顺序结构:
如果代码里没有流程控制,程序是至上而下一行一行执行的,一条语句执行完之后继续执行 下一条语句,直到程序的最后。
2 、分支结构(条件控制)
(1)if控制语句
三种格式:
if(条件表达式){执行语句;}
if(条件表达式){执行语句;}else{执行语句;}
if(条件表达式){执行语句;}else if (条件表达式){执行语句;}……else{执行语句;}
(2)switch 控制语句
switch语句中case标签在JDK1.5之前必须是整数(long类型除外)或者枚举,不能是字符串,在JDK1.7之后允许使用字符串(String)。
工作原理:用小括号中的变量的值依次和 case 后面的值进行对比,和哪个 case 后面的值相同了 就执行哪个 case 后面的语句,如果没有相同的则执行 default 后面的语句;
switch(变量){
case 表达式可能的结果值 1:
执行语句;
break;
case:表达式可能的结果值 2:
执行语句;
break;
default:
执行语句;
break;//最后这个一般不写
}
1):break 是可以省略的,如果省略了就一直执行到遇到 break 为止;
2 ):default 可以写在 switch 结构中的任意位置; 如果将 default 语句放在了第一行,则 不管 expression 与 case 中的 value 是否匹配,程序会从 default 开始执行直到第一个 break 出 现。
1)、当判断固定个数的值的时候,可以使用 if ,也可以使用 switch 。 但是建议使用 switch ,效率相对较高。
总结:多选择结构和switch的关系:如果布尔条件表达式是等值的情况,可以使用switch,也可以使用多重选择结构;如果布尔条件表达式区间判断的情况,则使用多重选择结构。
3 循环结构
do while:同上,只是至少要执行一次(先做,后判断);
(1)while 循环
while(条件表达式){执行语句;}
(2) do....while 循环
do{执行语句}while(条件表达式);
(3)for循环
for(初始化表达式(1);循环条件表达式(2);循环后的操作表达式(迭代因子)(3)) {
执行语句;(4)
}
执行顺序:(1) → (2) → (4) → (3) → (2) → (4) → (3)
迭代因子控制循环变量的增减
区别在于 for 为了循环而定义的变量在 for 循环结束就在内存中释放。
2、最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,
如何合理地使用while 与 for呢?
当明确循环次数的时,建议使用for 循环。
当不明确循环次数时,建议使用while 循环。
总结:while 和do while的区别:while 先判断,后执行;do while 先执行,后判断。
4 break语句和continue语句
4.1 break 语句
4.2 continue 语句
continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
1. continue用在while,do-while中,continue 语句立刻跳到循环首部,越过了当前循环的其余部分。
2. continue用在for循环中,跳到for循环的迭代因子部分。
4.3 带标签break和continue:
public class Test18 {
public static void main(String args[]) {
outer: for (int i = 101; i < 150; i++) {
for (int j = 2; j < i / 2; j++) {
if (i % j == 0){
continue outer; //退出到标签指定地。
}
}
System.out.print(i + " ");
}
}
}
总结:break:退出整个循环(仅限于当前所在的循环体,不再循环剩下的循环次数),
continue:退出本次循环,本次下面的循环体不执行,继续执行前面的循环,带标签的break和continue可以退出到标签指定地。
5、方法
5.1、概述:
方法就是一段用来完成特定功能的代码片段,类似于其它语言的函数。
5.2 方法声明格式:
[修饰符1 修饰符2 …] 返回值类型 方法名(形式参数列表){ Java语句;… … … }
5.3 方法的调用方式:
6、方法的重载
6.1 定义:
方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。 调用时,会根据不同的参数自动匹配对应的方法。(方法名相同,形参列表不同)
总结:方法名相同,形参列表(形参类型、形参个数、形参顺序不同)
7、递归结构
递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。
public class Test22 {
public static void main(String[] args) {
long d1 = System.currentTimeMillis();
System.out.printf("%d阶乘的结果:%s%n", 10, factorial(10));
long d2 = System.currentTimeMillis();
System.out.printf("递归费时:%s%n", d2-d1); //耗时:32ms
}
/** 求阶乘的方法*/
static long factorial(int n){
if(n==1){//递归头
return 1;
}else{//递归体
return n*factorial(n-1);//n! = n * (n-1)!
}
}
}
缺陷: 简单的程序是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。
任何能用递归解决的问题也能使用迭代解决。在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。