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 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

注意

 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 方法的调用方式:

对象名.方法名(实参列表)

方法的详细说明

1. 形式参数:在方法声明时用于接收外界传入的数据。

2. 实参:调用方法时实际传给方法的数据。

3. 返回值:方法在执行完毕后返还给调用它的环境的数据。

4. 返回值类型:事先约定的返回值的数据类型,如无返回值,必须显示指定为为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)!
        }
    }
}

缺陷: 简单的程序是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。

注意:

     任何能用递归解决的问题也能使用迭代解决。在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。

总结:递归定义是:一个使用递归技术的方法将会直接或者间接的调用自己,优点:程序简单,缺点:占内存,耗时间,耗资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值