【04】JAVASE-循环语句【从零开始学JAVA】

server/2024/9/23 16:53:55/

Java零基础系列课程-JavaSE基础篇

Lecture:波哥

在这里插入图片描述

  Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。

四、循环语句

循环语句就是重复执行某块代码,能够大大提高我们的效率

java">/*** 输出一个 好好学习,天天向上 这个信息到控制台上* 输出两遍*    10遍呢*    100遍*    10000遍?* @param args*/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("好好学习,天天向上");System.out.println("好好学习,天天向上");*/for(int i = 0 ; i < 10000 ; i ++){System.out.println("好好学习,天天向上 : " + i);}}

for_41">1.for循环

for_43">1.1 for循环的语法格式

java">for( 表达式1 ; 表达式2 ; 表达式3 ) 
{// 循环体语句  
}

语法格式说明:

java">for( 初始化语句 ; 循环条件语句 ; 控制条件语句 ) 
{// 循环体语句  
}
表达式说明
表达式1初始化语句,完成变量的初始化操作 初始化语句只会在第一次执行一次
表达式2循环条件语句,boolean类型,返回true进入循环体,返回false结束循环
表达式3控制条件语句,在循环体执行完成后执行的代码,负责修正变量,改变循环条件的

for_67">1.2 for循环的执行流程

在这里插入图片描述

1.3 课堂案例

  1. 控制台输出数据1-10
  2. 计算1到100的和,用for语句实现
  3. 求1~100之间不能被3整除的数的和

案例代码

java">/*** 控制台输出数据1-10* @param args*/
public static void main(String[] args) {// 添加注释的快捷键 多行注释 ctrl + shift + //*for (int i = 0 ; i < 10 ; i ++) {System.out.println(i+1);}*///		循环案例的实现  单行注释 Ctrl+/for (int i = 1 ; i <= 10 ; i ++) {System.out.println(i);}}
java">/*** 计算1到100的和,用for语句实现* @param args*/
public static void main(String[] args) {// 在for循环之外创建一个变量 来接收我们的数据 相当于一个 容器int total = 0 ; // 保存计算结果for ( int i = 1 ; i <= 100 ; i ++) {total += i; // 将变量的结果累加到到total中}System.out.println(total);}
java">package com.bobo.fordemo;public class ForDemo04 {/*** 求1~100之间不能被3整除的数的和*    1.先找到所有不能被3整除的数*    2.将找到的数累加即可* @param args*/public static void main(String[] args) {int total = 0;for( int i = 1 ; i <= 100 ; i ++){if (i % 3 != 0) {// 表示不能被3整除// System.out.println(i);total += i;}}System.out.println("1~100之间不能被3整除的数的和:" + total);}}

扩展案例:

1.求n的阶乘 9 * 8 * 7 * … * 1

java">package com.bobo.fordemo;import java.util.Scanner;public class ForDemo05 {/*** 求n的阶乘 9 * 8 * 7 * ... * 1* 5的阶乘*     5 * 4 * 3 * 2 * 1*     1 * 2 * 3 * 4 * 5*     其实和 1 到 N的整合的和  效果是一样* @param args*/public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("输入阶乘的值:" );int num = in.nextInt();int total = 1 ; // 记录阶乘结果的变量for( int i = 1 ; i <= num; i++){total *= i;}System.out.println(num + "的阶乘是:" + total);}}

2.实现如下的效果

请输入一个值:
根据这个值可以输出如下的加法表:
0 + 6 = 6
1 + 5 = 6
2 + 4 = 6
3 + 3 = 6
4 + 2 = 6
5 + 1 = 6
6 + 0 = 6
java">package com.bobo.fordemo;import java.util.Scanner;public class ForDemo06 {/*** 请输入一个值:根据这个值可以输出如下的加法表:0 + 6 = 61 + 5 = 62 + 4 = 63 + 3 = 64 + 2 = 65 + 1 = 66 + 0 = 6i + (6-i) = 6循环N次,每次循环打印一条输出语句* @param args*/public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("请输入一个1-9之间的数字" );int num = in.nextInt();for (int i = 0 ; i <= num ; i++) {System.out.println(i + " + " + (num - i ) + " = " + num);}System.out.println("------------");// 第二种方式 通过多个变量来控制for (int i = 0, j = num ; i <= num ;i++,j--) {System.out.println(i + " + " + j + " = " + num);}System.out.println("------------");// 第二种方式 通过多个变量来控制for (int i = 0, j = num ; j >= 0 ;i++,j--) {System.out.println(i + " + " + j + " = " + num);}}}

3.在控制台输出所有5位数的回文数字

注意:回文数如 12321,13531 等等… 11111

java">package com.bobo.fordemo;public class ForDemo07 {/*** 在控制台输出所有5位数的回文数字注意:回文数如 12321,13531 等等... 11111解决思路:1.遍历找出所有的5位数2.分离出遍历的数字的  万位  千位   十位  个位3.判断如果 万位和个位相等 同时 千位和十位相等 说明是我们要找的数字* @param args*/public static void main(String[] args) {for(int i = 10000; i < 100000 ; i ++ ){int ge = i / 1 % 10;int shi = i / 10 % 10;int qian = i / 1000 % 10;int wan = i / 10000 % 10;if (ge == wan && shi == qian) {System.out.println(i);}}}}

4.在控制台输出1000以内的所有的水仙花数,并统计水仙花数的个数。

注意:水仙花数指的是其各位数的立方和等于该数本身的三位数

153 = 1^3 + 5^ + 3^ = 153

java">package com.bobo.fordemo;public class ForDemo08 {/*** ctrl + d 快速删除一行* * 在控制台输出1000以内的所有的水仙花数,并统计水仙花数的个数。注意:水仙花数指的是其各位数的立方和等于该数本身的三位数153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 =153解决思路:1.遍历出所有的数字2.对遍历的数字,拆分出 个位 十位 百位3.判断 个位的立方+ 十位的立方 + 百位的立方 是否等于遍历的数字本身4.是  输出这个结果  统计变量+15.不是 不做任何处理* @param args*/public static void main(String[] args) {int count = 0 ; // 统计水仙花数的个数for (int i = 0 ; i <= 1000; i ++) {int ge = i / 1 % 10;int shi = i / 10 % 10;int bai = i / 100 % 10;/*if(ge * ge * ge + shi * shi * shi + bai* bai * bai == i){System.out.println(i);count ++;}*/if (Math.pow(ge, 3) + Math.pow(shi, 3) + Math.pow(bai, 3) == i) {System.out.println(i);count ++;} }System.out.println("1000以内的水仙花数是:" + count);}}

for_354">1.4 for循环的注意事项

1.4.1 大括号可以省略

如果循环体大括号省略 ,循环体默认执行for语句后面的第一条语句(;结尾)

java">public class ForDemo09 {public static void main(String[] args) {// 作用域:i 的作用域 是在for循环以内  表达式 1 2 3 4 中使用for(int i = 0 ; i < 4 ; i ++)//;System.out.println(i);// 这个是我们的循环体System.out.println("---------");}}
1.4.2 表达式2的值是一个boolean类型

表达式2如果有多个条件我们需要用逻辑运算符连接

java">int a = 10;
int b = 20;
for(int i = 0 ; i < 10 && (a > 0 || b < 30) ; i ++){}
1.4.3 表达式2可以省略,但是";"不能省略

​ 如果表达式2省略的话,那么程序会一直执行,直到资源耗尽,死循环

java">public static void main(String[] args) {for ( int i = 0 ;  ; i ++) {System.out.println("-->" + i);}
}
1.4.4 表达式1 省略,表达式3省略

​ 表达式1和表达式3也省略

java">package com.bobo.fordemo;public class ForDemo11 {/*** 表达式1 初始化变量的* @param args*/public static void main(String[] args) {int i = 0; // 表示i的作用域在方法中for (; i < 10 ;) {System.out.println(i);// 将表达式4的信息 写到循环体的尾部i ++;}/*for ( int i = 0 ; i < 10; i++) {}*/}}
1.4.5 表达式123都可以省略

​ 表达式123都可以省略,但是两个";"是不能够省略的,出现死循环的情况

java">public class ForDemo12 {/*** 表达式1 初始化变量的* @param args*/public static void main(String[] args) {for(;;){System.out.println("----");}}}

while_461">2.while循环

while是Java使用频率也比较高的一种循环方式。while语句的语法结构要比for循环简单些

2.1 语法格式

java">while (条件表达式) {// 循环语句
}
java">/*** while循环* @param args*/
public static void main(String[] args) {int i = 0;while( i < 10){System.out.println("i = " + i);i ++ ;}System.out.println("循环结束...");
}

while_491">2.2 while语句的执行顺序

  1. 首先判断条件表达式结果是为true还是false
  2. 如果结果是true,执行循环体
  3. 如果结果是false,退出循环体

在这里插入图片描述

这里面为了便于大家的理解,可以将while循环看出for循环的一种简化形式

for( 表达式1 ; 表达式2 ; 表达式3 ){循环体
}
--->
表达式1
for( ; 表达式2 ; ){循环体;表达式3
}

对应的while循环

java">表达式1
while (表达式2){循环体表达式3
}

2.3 课堂案例

1.用while语句去实现1到100的和

java">package com.bobo.whiledemo;public class WhileDemo02 {/*** 用while语句去实现1到100的和* @param args*/public static void main(String[] args) {int total = 0; // 记录总和int i = 1; // 声明的变量while( i <= 100){total += i;// 改变循环条件i ++; // 不能漏掉,不然会 死循环}System.out.println("1到100的和是:" + total);}}

2.用while语句实现1到100偶数的和

java">/*** 用while语句实现1到100偶数的和* @param args*/public static void main(String[] args) {int total = 0;int i = 0;while( i <= 100){if( i % 2 == 0){// 表示循环的数字是偶数total += i;}i++;}System.out.println("1到100之间的偶数和是:" + total);}public static void main(String[] args) {int sum = 0;int i = 2;while(i <= 100){sum += i;i += 2; // 每次自增2}System.out.println("sum = " + sum);}

3.将前面讲的for循环中的案例该为通过while循环来实现

while_604">3.do while循环

​ do while循环的特点:先执行一次循环体,然后在判断条件是否成立

3.1 语法格式

java">do{循环语句;
}while ( 条件表达式 ) ;
java">public static void main(String[] args) {int i = 0 ;do{// 循环在循环条件判断之前执行一次System.out.println("----" + i);}while(i < 0);System.out.println("循环执行结束...");}

3.2 执行顺序

  1. 先执行循环语句一次
  2. 然后判断条件语句的返回结果是true还是false
  3. 如果是true再执行一次循环体,然后判断条件语句
  4. 如果是false,那么直接退出循环

在这里插入图片描述

3.3 课堂案例

1.使用do-while语句去实现1到100的和

2.使用do-while循环实现1-100的偶数求和

3.使用do-while循环实现for循环中的所有的案例

whilefor_654">4. while循环和for循环的对比

  1. for循环和while循环都是先判断再执行,do-while是先执行再判断,并且一定会执行一次循环体
  2. 在循环结束之后,还希望能够使用循环变量,使用while循环,否则使用for循环,for循环的变量i只能作用于循环体
  3. 死循环的方式

while:

java">while (true) {}

do -while:

java">do{}while(true);

for:

java">for (;;){}

循环方式的选择:

1.如果循环条件是一个区间范围(循环次数确定的),推荐使用for循环

2.如果循环次数不明确的情况下,推荐使用while循环

3.在第二个基础上如果要先执行再判断就使用do-while循环,否则使用while循环

场景引入:

请在控制台输出如下的图形
********
********
********
java">public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("********");System.out.println("********");System.out.println("********");
}

5.嵌套循环

5.1 嵌套循环的格式

最常用的方式:

java">for(表达式1 ; 表达式2 ; 表达式3){for(表达式1 ; 表达式2 ; 表达式3){}
}

其他的组合

java">for(表达式1 ; 表达式2 ; 表达式3){while(表达式){}
}
java">while(表达式){while(表达式){}   
}
java">do{for(表达式1 ; 表达式2 ; 表达式3){}
}while(表达式);

5.2 嵌套循环的规则

  1. 外层循环控制行数,内层循环控制列数
  2. 外层循环变量变化一次,内层循环变量要变化一轮

5.3 课堂案例

1.打印如下的图案

********
********
********
java">package com.bobo.forfor;public class QTDemo01 {/*** 请在控制台输出如下的图形*  ************************* @param args*/public static void main(String[] args) {// TODO Auto-generated method stub/*System.out.println("********");System.out.println("********");System.out.println("********");*/for(int i = 0 ; i < 8; i ++){System.out.print("*");}System.out.println(); // 显示的换行for(int i = 0 ; i < 8; i ++){System.out.print("*");}System.out.println();// 显示的换行for(int i = 0 ; i < 8; i ++){System.out.print("*");}System.out.println();// 显示的换行System.out.println("------------------");}}public static void main(String[] args) {/** 1. 外层循环控制行数,内层循环控制列数* 2. 外层循环变量变化以此,内层循环变量要变化一轮*/for (int i = 0 ; i < 3 ; i ++) { // 外层循环控制行数for( int j = 0 ; j < 8 ; j ++){ // 内层循环控制列数System.out.print("*");}System.out.println(); // 内层循环走完一遍 显示的换行}}

2.打印如下图案,直角三角形

*
**
***
****
*****
******
java">package com.bobo.forfor;public class QTDemo02 {/*** 输出如下图案*  *********************1. 外层循环控制行数,内层循环控制列数2. 外层循环变量变化以此,内层循环变量要变化一轮* @param args*/public static void main(String[] args) {for(int i = 0 ; i < 6 ; i ++){// i = 0 1*// i = 1 2*// i = 2 3*// ...for(int j = 0 ; j < i +1 ; j ++){System.out.print("*");}System.out.println();}}}

3.打印如下图案,直角三角形

*
***
*****
*******
*********
java">package com.bobo.forfor;public class QTDemo03 {/*** 输出如下图案*  ************************************1. 外层循环控制行数,内层循环控制列数2. 外层循环变量变化以此,内层循环变量要变化一轮* @param args*/public static void main(String[] args) {for(int i = 0 ; i < 6 ; i ++){// i = 0 1*// i = 1 3*// i = 2 5*// ...for(int j = 0 ; j < 2 * i +1 ; j ++){System.out.print("*");}System.out.println();}}}

4.打印九九乘法表

java">package com.bobo.forfor;public class QTDemo04 {/*** 打印九九乘法表* 1*1=1* 1*2=2  2*2=4* 1*3=3  2*3=6 3*3=9* ....* 1*9=9  2*9=18 3*9=27 4*9=36 5*9=45 6*9=72 ... 9*9=81* * i = 1 1个表达式* i = 2 2个表达式* ..* i = 9 9个表达式* @param args*/public static void main(String[] args) {for(int i = 1 ; i <= 9 ; i ++){for(int j = 1 ;j <= i ; j ++){System.out.print(j + " × " + i + " = " +  i*j + "\t");}System.out.println();}}}

输出的结果

1×1=1	
1×2=2	2×2=4	
1×3=3	2×3=6	3×3=9	
1×4=4	2×4=8	3×4=12	4×4=16	
1×5=5	2×5=10	3×5=15	4×5=20	5×5=25	
1×6=6	2×6=12	3×6=18	4×6=24	5×6=30	6×6=36	
1×7=7	2×7=14	3×7=21	4×7=28	5×7=35	6×7=42	7×7=49	
1×8=8	2×8=16	3×8=24	4×8=32	5×8=40	6×8=48	7×8=56	8×8=64	
1×9=9	2×9=18	3×9=27	4×9=36	5×9=45	6×9=54	7×9=63	8×9=72	9×9=81

5.计算若干个学生5门课的平均分。

java">package com.bobo.forfor;import java.util.Scanner;public class QTDemo05 {/*** 计算若干个学生5门课的平均分。*    提示:*       外层循环一次处理一个学生*       内层循环一遍处理一个学生的五门成绩* @param args*/public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("输入学生的个数:");int num = in.nextInt();for(int i = 1 ; i <= num ; i ++){double sum = 0.0 ; // 记录当前学生的总成绩for(int j = 0 ; j < 5 ; j ++){ // 五门课程 内层循环5次// 获取该学生的每门课程的成绩double score = 0.0;System.out.println("请输入第" + i + "个学生的第" + (j+1) + "门的成绩");score = in.nextDouble();sum += score;} // 通过一次内层循环获取到该学生的总成绩System.out.println("第" + i + "个学生的平均成绩是:" + sum/5);}}}

在这里插入图片描述

breakcontinuereturn_1038">6.breakcontinuereturn关键字

break_1040">6.1 break关键字

break_1042">6.1.1 break关键字介绍

​ 在循环过程中我们要跳出循环的时候那么可以通过break关键字来实现,改变程序控制流。

用户do-whilewhilefor循环中,可以跳出循环而执行循环以后的语句

在这里插入图片描述

6.1.2 使用的场合
  1. 循环语句中(单层循环、嵌套循环)

  2. switch语句

6.1.3 课堂案例

1.打印1到10个数,遇到4的倍数程序自动退出

java">package com.bobo.breakdemo;public class BreakDemo01 {/*** 打印1到10个数,遇到4的倍数程序自动退出* @param args*/public static void main(String[] args) {for( int i = 1 ;i <= 10 ; i++){if(i % 4 == 0){break; // 跳出循环 执行之后的代码}System.out.println(i);}System.out.println("程序结束...");}}

2.循环录入学生成绩,求和。如果输入的成绩为负数。则停止输入,给出错误的提示

java">package com.bobo.breakdemo;import java.util.Scanner;public class BreakDemo02 {/*** 循环录入学生成绩,求和。如果输入的成绩为负数。则停止输入,给出错误的提示* @param args*/public static void main(String[] args) {Scanner in = new Scanner(System.in);int sum = 0;int i = 1; // 记录循环的次数while(true){System.out.println("请输入第" + i + "个学生的成绩:");int score = in.nextInt();if(score < 0){// 表示是负数System.out.println("你输入的数据有误!!!");break; // 退出循环}sum += score;System.out.println("sum = " +sum);i++;}}}

3.嵌套循环中的break;只能跳出包裹的那层循环

java">    public static void main(String[] args) {for (int i = 0; i < 5; i++) {for (int j = 0; j < 5; j++) {if(j == 3 && i ==2){break;}System.out.print( i + "+ " + j + " = " + (i + j ) + "\t" );}//break;System.out.println();}}

在这里插入图片描述

continue__1155">6.2 continue 关键字

作用:continue关键字用于跳过某个循环语句的一次执行,下一次循环还会继续

使用的场合:跳过循环体中剩余的语句而执行下一次循环

在这里插入图片描述

java">package com.bobo.continuedemo;import java.util.Scanner;public class ContinueDemo01 {/*** 循环录入Java课程的学生成绩,统计分数大于等于80分的学生比例* 分析:*    1.通过循环获取分数大于等于80分的学生人数num*    2.判断成绩是否<80分,满足条件不执行num++,直接进入下一次循环* @param args*/public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入班级总的人数:");int count = input.nextInt();int num = 0 ; // 记录成绩大于等于80分的人数for(int i = 0 ; i < count ; i ++){System.out.println("请输入第" + i + "个学生的成绩:");int score = input.nextInt();if(score < 80){continue;}num++;}System.out.println("80分以上的人数:" + num);System.out.println("80分以上的人数的比例:" + num/(double)count);}}

breakcontinue_1209">6.3 breakcontinue的对比

使用场合

  1. break可以用于switch语句和循环结构中
  2. continue只能用于循环结构中

作用:

  1. break语句终止某个循环,程序跳转到循环块外的下一条语句

  2. continue跳出本次循环,进入下一次循环

6.4 课外练习

1.循环录入会员信息

在这里插入图片描述

java">package com.bobo.continuedemo;import java.util.Scanner;public class ContinueDemo02 {/*** 循环录入会员信息* @param args*/public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("MyShopping管理系统....");for(int i = 0 ; i < 3 ; i ++){System.out.println(i + "请输入会员号<4位整数>");int vipNumber = input.nextInt();System.out.println("请输入会员生日(月/日 用俩位整数表示):");String birthday = input.next();System.out.println("请输入会员的积分:");int score = input.nextInt();if( !(vipNumber >=1000 && vipNumber < 10000)){System.out.println("客户号" + vipNumber + "无效");System.out.println("录入信息失败...");continue;}System.out.println("您录入的会员信息是:");System.out.println(vipNumber + "\t" + birthday + "\t" + score);}}}

在这里插入图片描述

2.模拟验证用户登录信息

录入成功:

在这里插入图片描述

在这里插入图片描述

java">package com.bobo.continuedemo;import java.util.Scanner;public class ContinueDemo03 {/*** 模拟用户登录操作*   情况:*      1.登录成功*      2.登录失败,提示可以使用的登录次数,*      3.登录失败的次数超过了规定的次数,就不让再登录* @param args*/public static void main(String[] args) {Scanner input = new Scanner(System.in);for(int i = 0 ; i < 3 ; i ++){ // 循环控制登录的次数System.out.println("请输入登录的账号:" );String userName = input.next();System.out.println("请输入密码:");String password = input.next();// 判断账号密码是否正确 admin  123456if("admin".equals(userName) && "123456".equals(password)){// 表示登录成功System.out.println("欢迎光临MyShopping管理系统....");break; // 跳出循环}// 表示登录失败if(i == 2){System.out.println("对不起,您3次机会都输入错误~~");continue;}System.out.println("认证失败,您还有" + (2-i) + "次机会");}}}

在这里插入图片描述

在这里插入图片描述

return_1351">6.5 return关键字

return关键字的作用是从当前方法中退出。返回到调用该方法的语句处,并且从该语句的下一条语句处开始执行。还没有讲方法,我们会在下节课中给大家详细介绍


http://www.ppmy.cn/server/27022.html

相关文章

STM32中的PWM

一、介绍 二、制作一个呼吸灯的效果&#xff08;使用PWM&#xff09; 原理是中心对齐的方式 学会分析复用管脚&#xff08;根据手册&#xff09; 配置 更正:是 最后一个输出的模式 最后生成代码 三、代码 要修改的业务代码 改代码&#xff0c;实现呼吸灯

表格中斜线的处理

此处的斜线,不是用表格写的,但是也适用于表格,只是需要更改表格的样式,可以 按照如下处理,即可 呈现的效果:如图所示 template部分: <div class"header_detail custom"><div class"right">节次</div><div class"left">…

Python 与 TensorFlow2 生成式 AI(三)

原文&#xff1a;zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第七章&#xff1a;使用 GAN 进行风格转移 神经网络在涉及分析和语言技能的各种任务中正在取得进步。创造力是人类一直占有优势的领域&…

【C#】Stopwatch计时器

使用Stopwatch检查C#中代码块的执行时间&#xff0c;比如歌曲&#xff0c;图片的下载时间问题 首先&#xff0c;我们可看到Stopwatch 类内部的函数。 根据需求&#xff0c;我们具体可使用到 Start() 开始计时&#xff0c;Stop() 停止计时等 //创建 Stopwatch 实例 Stopwatch …

服务器数据恢复—存储硬盘坏道,指示灯亮黄色的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台某品牌EqualLogic PS系列某型号存储&#xff0c;存储中有一组由16块SAS硬盘组建的RAID5磁盘阵列&#xff0c;RAID5上划分VMFS文件系统存放虚拟机文件。存储系统上层一共分了4个卷。 raid5阵列中磁盘出现故障&#xff0c;有2块硬盘…

C++深度解析教程笔记1

C深度解析教程笔记1 第1课 - 学习 C 的意义第2课 - C 到 C 的升级C代码-register与重复全局变量cmd命令C代码cmdC代码小结 本文学习自狄泰软件学院 唐佐林老师的 C深度解析教程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 第1课 - 学习 C 的意义 第2课 -…

「JavaEE」线程安全1:成因死锁

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;JavaEE &#x1f387;欢迎点赞收藏加关注哦&#xff01; 线程安全成因&死锁 &#x1f349;线程安全问题的成因&#x1f349;可重入性&#x1f349;死锁&#x1f34c;解决方案 &#x1f349…

Spring-aop切面环绕通知

1.pom引入 <!-- 切面依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 2.定义注解&#xff1a;AroundAnnotation import java.lang.annotation…