JAVA 基础学习之程序控制流程
程序控制流程
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 出 现。
(先执行case,如没有匹配到时再执行default)
这些语句什么时候用?
1)、当判断固定个数的值的时候,可以使用 if ,也可以使用 switch 。 但是建议使用 switch ,效率相对较高。
2)、当判断数据范围,获取判断运算结果 boolean 类型时,需要使用 if 。
3)、当某些语句需要执行很多次时,就用循环结构。
总结:多选择结构和switch的关系:如果布尔条件表达式是等值的情况,可以使用switch,也可以使用多重选择结构;如果布尔条件表达式区间判断的情况,则使用多重选择结构。
3 循环结构
while:事先不需要知道循环执行多少次;
do while:同上,只是至少要执行一次(先做,后判断);
for:需要知道循环次数;
(1)while 循环
格式:
while(条件表达式){执行语句;}
(2) do….while 循环
格式:
do{执行语句}while(条件表达式);
(3)for循环
格式:
for(初始化表达式(1);循环条件表达式(2);循环后的操作表达式(迭代因子)(3)) {
执行语句;(4)
}
执行顺序:(1) → (2) → (4) → (3) → (2) → (4) → (3)
迭代因子控制循环变量的增减
注意:
1、while 与 for 可以互换
区别在于 for 为了循环而定义的变量在 for 循环结束就在内存中释放。
而 while 循环使用的变量在循环结束后还可以继续使用。
2、最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,
而是根据某些条件,来控制循环。
如何合理地使用while 与 for呢?
当明确循环次数的时,建议使用for 循环。
当不明确循环次数时,建议使用while 循环。
总结:while 和do while的区别:while 先判断,后执行;do while 先执行,后判断。
4 break语句和continue语句
4.1 break 语句
break用于强行退出循环,不执行循环中剩余的语句。
4.2 continue 语句
continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
注意:
continue用在while,do-while中,continue 语句立刻跳到循环首部,越过了当前循环的其余部分。
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 方法的调用方式:
对象名.方法名(实参列表)
方法的详细说明
形式参数:在方法声明时用于接收外界传入的数据。
实参:调用方法时实际传给方法的数据。
返回值:方法在执行完毕后返还给调用它的环境的数据。
返回值类型:事先约定的返回值的数据类型,如无返回值,必须显示指定为为void。
6、方法的重载
6.1 定义:
方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。 调用时,会根据不同的参数自动匹配对应的方法。(方法名相同,形参列表不同)
注意:
构成方法重载的条件:
1.不同的含义:形参列表(形参类型、形参个数、形参顺序不同)
2.只有返回值不同不构成方法的重载
3.只有形参的名称不同,不构成方法的重载
总结:方法名相同,形参列表(形参类型、形参个数、形参顺序不同)
7、递归结构
递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。
递归结构包括两个部分:
1.定义递归头。所谓的递归头就是结束条件
2.递归体。也就是循环体
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)!
}
}
}
缺陷: 简单的程序是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。
注意:
任何能用递归解决的问题也能使用迭代解决。在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。
总结:递归定义是:一个使用递归技术的方法将会直接或者间接的调用自己,优点:程序简单,缺点:占内存,耗时间,耗资源
还没有评论,来说两句吧...