Bootstrap

Java 入门基础篇11 - java基础语法

一 流程控制

1.1 流程控制语句介绍

一个java程序有很多条语句组成,流程控制语句是用来控制程序中的各语句执行的顺序,通过流程语句控制让程序执行顺序达到我们想要实现的功能。
其流程控制方式采用结构化程序设计中规定的三种基本流程结构:
   顺序结构
   选择结构
   循环结构

1.2 顺序结构

顺序结构介绍

是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
总结:写在前面的先执行,写在后面的后执行

案例

public static void main(String[] args){
      System.out.println("买菜");
      System.out.println("摘菜");
      System.out.println("洗菜");
      System.out.println("切菜");
      System.out.println("配菜");
      System.out.println("炒菜");
      System.out.println("吃饭");
      System.out.println("吃完了");
      System.out.println("锅和碗一起扔了,就可以不用洗了O(∩_∩)O");
}

二 选择结构

2.1 选择结构介绍

选择也被称为分支结构,选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。

选择结构的分类

if语句
switch语句

2.2 选择语句if

2.2.1 格式1

if(逻辑表达式或boolean类型的值){
     语句体;
}

执行流程

先计算比较表达式的值,看其返回值是true还是false。
   true:行语句体
   false:不执行语句体

流程图

案例

判断两个变量是否等

代码:

public static void main(String[] args){
    // 定义两个变量
    int a = 1; 
    int b = 2; 
    //判断两个变量是否相等 
    if (a == b){ 
        System.out.println("a等于b");
    }
    System.out.println("程序运行完毕!");
}

注意:

1.比较表达式无论简单还是复杂,结果必须是boolean类型
2.if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
3.一般来说:有左大括号就没有分号,有分号就没有左大括号

2.2.2 if格式2

   if(比较表达式) {
        语句体1;
    }else {
        语句体2;
    }

执行流程

首先计算比较表达式的值,看其返回值是true还是false。
   true:执行语句体1
   false:执行语句体2

流程图

案例

判断一个数是奇数还是偶数

代码

public static void main(String[] args){ 
    // 判断给定的数据是奇数还是偶数 
    // 定义变量 
    int a = 1; 
    if(a % 2 == 0) { 
        System.out.println("a变量是一个偶数"); 
    } else{ 
        System.out.println("a变量是一个奇数"); 
    }
     System.out.println("程序运行完毕!");
}

用三元表达式替换

boolean flag = a % 2 == 0 ? true : false

2.2.3 if格式3

    if(比较表达式1) {
        语句体1;
    }else if(比较表达式2) {
        语句体2;
    }else if(比较表达式3) {
        语句体3;
    }
    ...
    else {
        语句体n+1;
    }

执行流程

首先计算比较表达式1看其返回值是true还是false,
如果是true,就执行语句体1,if语句结束。
如果是false,接着计算比较表达式2看其返回值是true还是false,
如果是true,就执行语句体2,if语句结束。
如果是false,接着计算比较表达式3看其返回值是true还是false,
...
如果都是false,就执行语句体n+1。
注意事项: 当只要有一个条件满足时,if语句结束。else是可以省略,但是不建议省略。
​
首先判断关系表达式1看其结果是true还是false
  true:执行语句体1,if语句结束
  false:继续判断关系表达式2看其结果是true还是false 
     true:执行语句体2,if语句结束 
     false:就继续判断关系表达式…看其结果是true还是false 
       false:执行语句体n+1

流程图

案例1

判断学生成绩等级
    90~100 优秀
    80~89  良
    70~79  中
    60~69  及格
    0~59   差

代码

      int score = 80;
      if( score >= 90 && score <= 100 ){
            System.out.println("优秀") ;
        }else if(score >= 80 && score <= 89 ){
            System.out.println("良") ;
        }else if(score >= 70 && score <= 79 ){
            System.out.println("中") ;
        }else if(score >= 60 && score <= 69 ){
            System.out.println("及格") ;
        }else {
            System.out.println("你真的好差,简直差得一匹啊!o(╥﹏╥)o") ;
        }

案例2:

求3个数800,200,1000中的最大数?

代码:

        // 获取三个数据中的最大值
        // 定义3个int类型的变量
        int a = 800 ;
        int b = 200 ;
        int c = 1000 ;
        // 使用if语句实现
        // 定义一个int类型的变量
        int max ;
        // 使用if语句
        if( a > b ){
            if( a > c ){
                max = a ;
            }else {
                max = c ;
            }
        }else {
            if( b > c ){
                max = b ;
            }else {
                max = c ;
            }
        }
        // 输出
        System.out.println("max : " + max) ;
    }

2.3 选择语句switch

2.3.1 switch语句介绍

一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个case,且被测试的变量会对每个switch case 进行检查。

switch语句格式

switch(表达式) {
  case 值1 : 
     语句体1 ;
     break ;
  case 值2 : 
     语句体2 ;
     break ;
   case 值3 : 
      语句体3 ;
      break ;
       ...
   default: 
       语句体 n + 1 ;
       break ;
   }
1.switch表示这是switch语句
        表达式的取值:byte,short,int,char
        JDK5以后可以是枚举(什么是枚举,以后再讲)
        JDK7以后可以是String 
2.case后面跟的是要和表达式进行比较的值
3.语句体部分可以是一条或多条语句
4.break表示中断,结束的意思,可以结束switch语句
5.default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似

执行流程

先计算表达式的值,依次和case后面的值进行比较,如果匹配成功就是case中的语句体,遇到break结束。如果和所有的case后面的值都不能匹配成功,就执行default中的语句体后结束程序。

流程图

案例

用1-7代表周一到周日,指定一个数字判断对应的星期周期。

代码

    //定义一个数字
    int num = 8 ;
    switch(num) {
        case 1 :
            System.out.println("星期一") ;
            break ;
        case 2 :
            System.out.println("星期二") ;
            break ;
        case 3 :
            System.out.println("星期三") ;
            break ;
        case 4 :
            System.out.println("星期四") ;
            break ;
        case 5 :
            System.out.println("星期五") ;
            break ;
        case 6 :
            System.out.println("星期六") ;
            break ;
        case 7 :
            System.out.println("星期日") ;
            break ;
        default:
            System.out.println("没有您输入的星期周期!o(╥﹏╥)o") ;
            break ;
    }

2.3.2 switch注意事项

1.case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
2.default可以省略吗?
        可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
3.break可以省略吗?
        可以省略,但是结果可能不是我们想要的。
        会出现一个现象:case穿透。
        最终我们建议不要省略
4.default一定要在最后吗?
        不是,可以在任意位置。但是建议在最后。
5.switch语句的结束条件
        遇到break就结束
        执行到末尾就结束

case穿透演示

       int month = 1;
       switch(month) {
            case 12 :
            case 1 :
            case 2 : 
                System.out.println("冬季") ;
                break ;
            case 3 :
            case 4 :
            case 5 :
                System.out.println("春季") ;
                break ;
            case 6 :
            case 7 :
            case 8 :
                System.out.println("夏季") ;
                break ;
            case 9 :
            case 10 :
            case 11 :
                System.out.println("秋季") ;
                break ;
            default :
                System.out.println("没有对应的季节!o(╥﹏╥)o") ;
                break ;
        }
​

2.3.3 switch面试题

byte可以作为switch的表达式吗?
long可以作为switch的表达式吗?
String可以作为switch的表达式吗?

2.3.4 if语句与switch语句区别

在做判断的时候,我们有两种选择,if语句和switch语句,那么,我们到底该如何选择使用那种语句呢?

if语句使用场景:
    针对结果是boolean类型的判断
    针对一个范围的判断
    针对几个常量值的判断
switch语句使用场景: 
    针对几个常量值的判断

三 循环语句

3.1 循环语句介绍及分类

循环语句介绍

循环语句的作用是可以让一段代码(语句)重复执行,重复执行的次数可以根据需求进行控制。

循环语句分类

for循环
while循环
do..while循环

3.2 for循环

for循环格式

for(初始化表达式语句;判断条件语句;控制条件语句) {
        循环体语句;
    }

执行流程

先执行初始化表达式语句,只会执行一次
执行判断条件语句,看其返回值是true还是false
    如果是true,就继续执行
    如果是false,就结束循环
执行循环体语句;
执行控制条件语句
继续判断条件语句

流程图

循环输出10次HelloWorld

for(int x = 1 ; x <= 10 ; x++){
     System.out.println("HelloWorld") ;
}
System.out.println("程序运行结束了......");

计算1-100之间偶数之和

// 需求:求出1-100之间偶数和
// 定义一个累加变量
int sum = 0 ;
// 使用for循环
for(int x = 1 ; x <= 100 ; x++){
   // 判断
   if( x%2 == 0 ){
      sum += x ;
    }
  }
  // 输出
 System.out.println("偶数和为: " + sum) ;

3.3 循环语句while

while语句格式

初始化条件语句;
while(判断条件语句) {
    循环体语句;
    控制条件语句;
}

while执行流程

a:执行初始化条件语句;
b:执行判断条件语句,看其返回值是true还是false
    如果是true,就继续执行
    如果是false,就结束循环
c:执行循环体语句;
d:执行控制条件语句
e:回到b继续。

流程图

循环输出10次helloworld

int x = 1 ;
// 使用while循环
while( x <= 10 ){
    System.out.println("HelloWorld!") ;
    x++ ;
  }

计算1-100中偶数之和

// 定义一个累加变量
int sum = 0 ;
// 套用while循环的格式
int x = 1 ;
while(x <= 100){
    // 判断
   if( x%2 == 0 ){
      sum += x ;
    }
     x++ ;
}
// 输出
System.out.println("sum: " + sum);

3.4 循环语句do...while

do...while格式

初始化条件语句;
do {
   循环体语句;
   控制条件语句;
 }while(判断条件语句);

执行流程

执行初始化条件语句;
执行循环体语句;
执行控制条件语句;
执行判断条件语句,看其返回值是true还是false
    true,就继续执行
    false,就结束循环

流程图

循环输出10次Helloworld

int y = 1 ;
  do {
      System.out.println("HelloWorld") ;
      y++ ;
   }while( y <= 3) ;

计算1-100中偶数之和

int sum = 0;
int i = 1;
    do{
        if(x%2 == 0){
            sum += x;
        }
        x++;
    }while(x<10);
System.out.println("sum "+sum);

3.5 循环语句区别

1.do...while循环至少执行一次循环体。
     而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
2.如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。不知道改用谁优先用for循环。
     因为for循环中变量及早的从内存中消失,可以提高内存的使用效率。
3.建议优先考虑for循环,然后是while循环 ,最后是do...while循环

3.6 多重循环语句

3.6.1 多重循环介绍

循环里面还有循环,如for循环中且套for循环或且套while循环等。
总循环次数 = 外循环次数 * 内循环次数
格式:
   for(初始化表达式;条件判断表达式;控制条件表达式){
        for(初始化表达式;条件判断表达式;控制条件表达式){
        }
   }
​

3.6.1 多重循环案例

使用嵌套循环,打印5*8的矩形

//外循环5次,
//内循环8次 
for(int i = 0; i < 5; i++){ 
    for(int j = 0; j < 8; j++){ 
       //不换行打印星号,没有ln
        System.out.print("*"); 
    }
    //内循环打印8个星号后,需要一次换行 
    System.out.println(); 
}

效果

********
********
********
********
********

3.7 死循环语句

死循环介绍

判断条件语句的结果永远都为true,那么循环体会一直无休止的执行下去。
死循环可能导致系统资源占用过高及系统全盘崩溃。

while语句死循环

while(true){...}

for语句死循环

for(;;){...}

3.8 控制跳转语句

3.8.1 控制语句介绍

什么是控制语句

控制语句的目的是为了控制程序跳转、中断等操作,goto是java中保留字目前还不能用,但java中提供了break、continue、return来实现控制语句的跳转和中断。

控制跳转语句的分类

break:
   中断,结束单层循环
continue 
   继续,结束本次循环继续下一次循环
return 
   返回,结束方法执行

3.8.2 案例演示

break演示

for(int x = 1 ; x <= 10 ; x++){
     if(x == 3){
         break ;
      }
      System.out.println("HelloWorld") ;
  }

continue演示

for(int x = 1; x <= 10; x++) {
    if( x % 3 == 0) {
        continue;
     }
    System.out.println("HelloWorld");
}

return演示

for(int x = 1; x <= 10; x++) {
    if( x % 3 == 0) {
        return;
     }
    System.out.println("HelloWorld");
}

1.break和continue关键字不影响for循环后面的语句执行 2.return是结束当前方法,for循环结束同时整个方法也结束了

;