-
什么是标识符?
在java源程序当中凡是程序员有权利自己命名的单词都是标识符
类名、方法名、变量名、接口名、常量名…
-
标识符的命名规则?
一个合法的标识符只能由数字、字母、下划线、美元符号组成,不能含有其他符号
-
不能以数字开头
-
严格区大小写
-
关键字不能做标识符
-
理论上无长度限制,最好不要太长
-
-
标识符的命名规范?
- 标识符的起名最好见名知意
- 遵守驼峰命名方式:UserService、SystemService
- 类名、接口名:首字母大写,后面每个单词首字母大写
- 变量名、方法名:首字母小写,后面每个单词首字母大写
- 常量名:全部大写
-
1)48个关键字:
abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while
-
2)2个保留字(现在没用以后可能用到作为关键字):
goto const
-
3)3个特殊直接量:true false null
2.3 字面值 2.4 变量 2.4.1什么是变量?Java中的关键字有哪些?「Java中53个关键字的意义及使用方法」
- 变量本质上是内存中的一块空间,这块空间“有数据类型”,“有名字”,“有字面值”。
- 变量包含三个部分:数据类型、名称、字面值[数据]
- 变量是内存中存储数据的最基本的单元
- 不同的数据类型有不同的类型,不同的数据类型底层会分配不同大小的空间
- 数据类型指导程序在运行阶段应该分配多大的空间
变量中存储的具体的”数据“必须和变量的”数据类型“一致,当不一致的时候编译报错。
2.4.4 声明/定义变量的语法格式数据类型 变量名;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PFeM797r-1658301427362)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220402164635956.png)]
2.4.5 变量声明之后怎么赋值语法格式:
变量名 = 字面值 ;
要求:字面值的数据类型必须和变量的数据类型一致。
= 等号是一个运算符,叫做赋值运算符,赋值运算符先运算等号右边的表达式,表达式执行结束之后的结果赋给左边的变量。
声明和赋值可以放到一起完成
int i = 10 ;2.4.6变量赋值后,可以重新赋值,变量的值可以变化
int i = 10 ; System.out.println(i); //10 i = 100 ; System.out.println(i); //100 i = 200 ; System.out.println(i); //200
有了变量的概念后,内存空间得到了重复的使用
int i = 10 ; System.out.println(i); ... .... System.out.println(i);2.4.7通常访问一个变量包括两种访问形式
-
第一种:读取变量中保存的具体数据 get/获取
-
第二种:修改变量中保存的具体数据 set/设置
i = 20 ; //set System.out.println(i) ; //get
int a , b , c ;
变量必须先声明,再赋值,才能访问 。只声明,不赋值,会出现编译错误。
2.4.9 在方法体中的java代码,是遵守自上而下的顺序执行的。java代码逐行执行。在同一个作用域中,变量名不可以同名,但是可以重新赋值。
2.4.10 变量的作用域什么是作用域?
变量的作用域,其实描述的是变量的有效范围。
在什么范围之内是可以被访问的,只要出了这个范围该变量就无法访问了。
2.4.11 关于变量的分类根据变量声明的位置来分类:
- 局部变量
在方法体当中声明的变量叫做局部变量
- 成员变量
2.5 数据类型 2.5.1 数据类型的作用?在方法体外[类体内]声明的变量叫做成员变量
程序中有很多数据,每一个数据都有相关的数据类型,不同的数据类型的数据占用空间大小不同。数据类型的作用是指导JVM在运行内存的时候给该数据分配多大的内存空间。
2.5.2 java中的数据类型基本数据类型
引用数据类型
类、接口、数组…
- 基本数据类型包括四大类八小种
1、整数型
byte short int long
2、浮点型
float double
3、布尔型
boolean
4、字符型
char
字符串String属于引用类型
2.5.3 八种数据类型占用空间大小| 类型描述 | 基本数据类型 | 占用空间大小[字节] | 取值范围 | 默认值 |
|---|---|---|---|---|
| 字节型 | byte | 1 | -128~127 | 0 |
| 短整型 | short | 2 | -32768~32768 | 0 |
| 整型 | int | 4 | -2^31~ 2^31-1 | 0 |
| 长整型 | long | 8 | -2^63 ~2^63-1 | 0 |
| 单精度浮点型 | float | 4 | 3.4e-45~1.4e38 | 0.0f |
| 双精度浮点型 | double | 8 | 4.9e-324~1.8e308 | 0.0d |
| 字符型 | char | 2 | 0~65535 | ‘u0000’ |
| 布尔型 | boolean | 1 | true/false | false |
*关于默认值:成员变量没有手动赋值,系统会默认赋值,局部变量则不会。八种数字类型的默认值是一切向0看齐。
2.5.4 取值范围二进制:数据的一种表现形式,十进制表示满十进一,二进制表示满二进一。
1 Byte = 8 bit [一个字节 = 8个比特位,一个比特位表示一个二进制位:0/1]
1 KB = 1024 Byte
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
例子:整数型当中的byte类型占用一个字节,即byte类型的数据占用8个比特位。那么byte类型的取值范围是什么?
关于java中的数据类型,数字都是有正负之分的,所以在数字的二进制当中有一个二进制位叫做”符号位“,这个符号位在所有二进制位的最左边,0表示正数,1表示负数。如果是浮点数,除符号位还有阶符。
byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。 short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。 int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。 long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。 float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。 double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。 boolean:只有true和false两个取值。 char:16位,存储Unicode码,用单引号赋值。
具体的数值怎么在计算机中存储,详见计算机组成原理中原码、反码、补码概念。
2.5.5 字符编码为什么要使用字符编码?
为了让计算机可以表示现实世界中的文字,需要制定文字和二进制之间的对照关系。这种对照转换关系被称为字符编码。
计算机最初只支持英文,最先出现的字符编码是ASCII码[采用一个字节编码]
‘a’ —>97 [01100001]
‘A’—>65
‘0’—>48
‘a’ --(按照ASCII解码)–>01100001
01100001–(按照ASCII编码)–>‘a’
编码和解码的时候采用同一套字典/对照表时,不会出现乱码。
当编码和解码的时候采用的不是同一套字典/对照表时,就会出现乱码问题。
*随着计算机的发展,后来出现了一种编码方式,是国际化标准组织ISO制定的,这种编码方式支持西欧语言,向上兼容ASCII码,但仍不支持中文。这种编码方式是:ISO-8859-1,又被称为 latin-1。随着计算机发展,支持中文的编码方式有:GB2312 < GBK < GB18030 ,其中GB18030可以表示的汉字最多,GB2312最少。
*支持繁体中文:大五码 < big5 >
*后来出现了一种编码方式,同一了全球的文字,容量较大,这种编码方式叫做:Unicode编码,Unicode编码方式有很多具体的实现:
UTF-8 UTF-16 UTF-32
实际开发中一般使用 utf-8 [统一编码方式]。java语言采用的是Unicode编码方式,因此标识符可以用中文。
2.5.6 数据类型详解 1.字符型(char)例子1
public class HelloWorld {
public static void main(String args[]){
//定义一个char型的变量,起名为c,同时赋值为‘a’
char c = 'a';
System.out.println(c);
//一个中文占用两个字符,char类型正好是2个字节
//所以java中的char类型可以存储一个中文字符
char x = '国';
System.out.println(x);
//编译错误 ab是字符串,不能用单引号括起来
//char y = 'ab';
//"a"是字符串类型,k变量是char类型,类型不兼容,编译错误。
//char k = "a";
char e ;
e ='e';
System.out.println(e);
e='f';//再次赋值
System.out.println(e);
}
}
-
转义字符
反斜杠在java语言中具有转义功能转移字符出现在特殊字符前,会将特殊字符转换成普通字符。
*JDK中自带的native2ascii.exe命令,可以将文字转换成unicode编码形式。
例子2
public class HelloWorld { public static void main(String args[]){ char c2 = '\';//在java中输出一个反斜杠字符 System.out.println(c2); char c3 = ''';//反斜杠具有转义功能,将第二个单引号转换成普通的单引号字符 System.out.println(c3); //转移字符出现在特殊字符前,会将特殊字符转换成普通字符 System.out.println(""HelloWorld!""); /例子1 运算符++的使用
public class App { public static void main(String[] args) { int k = 10 ; //++运算符可以出现在变量后面(单目运算符) k++ ; System.out.println("k: "+k); int y = 10; //++运算符可以出现在变量前面[单目运算符] ++y; System.out.println("y: "+y); //++运算符可以出现在变量前面或者后面,作用是使变量加1 //++出现在变量后,先做赋值运算,在对变量中的值进行自加1 int a = 100; int b = a++; System.out.println("a: "+a);//101 System.out.println("b: "+b);//100 //++出现在变量前 int m = 20 ; int n = ++m ; System.out.println("m: "+m);//21 System.out.println("n: "+n);//21 //出现在变量后 int x=99; System.out.println("x: "+x++);//99 //前 int s=99; System.out.println("s: "+ ++s);//100 int p = 100; System.out.println("++p: "+ ++p);//101 System.out.println("p: "+p);//101 } }2.6.2 关系运算符> 大于 >= 大于等于 < 小于 <= 小于等于 == 等于 != 不等于 = 是赋值运算符 == 是关系运算符 关系运算符的结果一定是布尔类型:true / false例子1
package test; public class App { public static void main(String[] args) { int a=10; int b=10; System.out.println(a>b);//false System.out.println(a>=b);//true System.out.println(a关系运算符的运算原理:
int a=10;
int b=10;
a>b 比较的时候,比较的是a中保存的10这个值和b中保存的10的这个值之间的大小比较。a>=b、a==b等亦是如此。
2.6.3 逻辑运算符(布尔运算符)& //逻辑与(bingqie) | //逻辑或(或者) ! //逻辑非(取反) ^ //逻辑异或(两边的算子只要不一样,结果就是true) && //短路与 || //短路或-
逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符最终的运算结果也是一个布尔类型。
-
短路与和逻辑与最终运算结果是相同的,只不过短路与存在短路现象。
-
短路或和逻辑或最终运算结果是相同的,只不过短路或存在短路现象。
逻辑与和短路与的区别
从某个角度来看,短路与更加智能,由于后面的表达式可能不执行,效率会更高。这种方式在实际的开发中使用较多。因此短路与更加常用。
但是,在某些特殊的业务逻辑当中,要求运算符两边的式子必须全部执行,此时必须使用逻辑与。
什么情况下会发生短路或?
第一个表达式的执行结果为true,会发生短路或
什么情况下会发生短路与?
第一个表达式的执行结果为false,会发生短路与
2.6.4 赋值运算符基本的赋值运算符 =
扩展的赋值运算符 += 、-=、*=、/=、%=
1.赋值类的运算符优先级:先执行等号右边的表达式,将执行结果赋值给左边的变量。
int i=10; //扩展的赋值运算符[+=运算符可以翻译为“追加/累加”] i+=5; System.out.println(i);//15 *********** int i=10; i-=5; System.out.println(i);//5
注意:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8kNHaFRD-1658301427368)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220409105406092.png)]
但是:
byte x=10; x+=5;//等同于:x=(byte)(x+5),并不等同于X=X+5 System.out.println(x);
2.注意以下代码:
byte i=0; i+=128;//等同于:i=(byte)i+128; //注意:这里的i可以编译运行,只不过会损失精度,结果为-128 int k=10; k+=5;//等同于:k=(int)k+5; long x=10L; int y=20; y+=x;//等同于y=(int)(y+x);
重要结论:扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的类型是byte类型,无论怎么进行追加或者追减,最终该变量的数据类型还是byte类型。
2.6.5 字符串连接运算符+运算符在java语言中有两个作用:1.加法运算,求和 2.字符串的连接运算
- 当“+”运算符两边的数据都是数字的话,一定是进行加法运算。
当“+”运算符两边的数据只要有一个数据是字符串,一定会进行字符串连接运算。并且连接运算之后的结果还 是一个字符串类型。
数字+数字—>数字[求和]
数字+“字符串”—>“字符串”[字符串]
-
在一个表达式当中可以出现多个“+”,在没有添加小括号的前提下,遵循自左向右的顺序依次运算。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gVm5BmsD-1658301427369)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220409112330117.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TM6cZxch-1658301427369)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220409112647848.png)]
注意加号运算符什么时候是做字符串连接,什么时候是做求和
语法规则:
布尔表达式 ? 表达式1 : 表达式2
当布尔表达式的结果为true时,选择表达式1作为整个表达式的执行结果当布尔表达式的结果为false时,选择表达式2作为整个表达式的执行结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RSdt4DkK-1658301427370)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220409113710477.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eQh5mckM-1658301427371)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220409113841452.png)]
2.7 控制语句选择结构
if if..else switch
循环结构
for while do...while
控制循环结构
break continue
2.7.1 选择结构-if 语句if语句属于选择结构,if语句又被称为分支语句/条件控制语句:
四种编写方式:
if(布尔表达式){ ...java语句; ...java语句; }if(布尔表达式){ ...java语句; ...java语句; }else{ ...java语句; ...java语句; }if(布尔表达式){ ...java语句; ...java语句; }else if(布尔表达式){ ...java语句; ...java语句; }else if(布尔表达式){ ...java语句; ...java语句; }...if(布尔表达式){ ...java语句; ...java语句; }else if(布尔表达式){ ...java语句; ...java语句; }else if(布尔表达式){ ...java语句; ...java语句; }else{ ...java语句; ...java语句; }- 对于if语句而言,只要有一个分支执行,整个if语句全部结束。
- 带有else分支的编写方式可以保证100%会有分支执行。
- 所有的控制语句都可以嵌套使用,注意代码格式,该缩进的缩进。
- if语句分支中只有一条java语句时,大括号可以省略不写。
例子1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xCoEQxky-1658301427372)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220409122158326.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fzqNHAtw-1658301427373)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220409122321146.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PxNB5nSc-1658301427374)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220409161924761.png)]
例子2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J2OqqeS0-1658301427375)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220409160950646.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E0kWeCM3-1658301427376)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220409161346645.png)]
例子3 if 的嵌套
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zNYJzBhw-1658301427376)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220409164608755.png)]
2.7.2 接受用户键盘输入[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ejflyW8F-1658301427377)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220409160235561.png)]
第一步: java.util.Scanner s= new java.util.Scanner(System.in); 第二步: String str = s.next(); 或者 int num = s.nextInt();2.7.3 选择结构-switch语句关于switch:
-
1.switch语句也属于选择结构,也是分支语句
-
2.switch语句的语法结构:一个比较完整的switch语句应该这样写:
switch (int或String类型的字面值或者变量){ case int或者String 类型的字面值或者变量: java 语句; ... break; case int或者String类型的字面值或者变量: java 语句; ... break; case int或者String类型的字面值或者变量 : java 语句; ... break; ... default: java语句; ... } -
3.switch语句执行原理:
switch后面的小括号当中的数据和case后面的数据进行一一匹配,匹配成功的分支执行。怎么匹配?按照自上而下的顺序依次匹配。
-
4.匹配成功的分支执行,分支当中最后有"break;"语句的话,整个switch语句终止。
-
5.匹配成功的分支执行,分支当中没有"break;"语句的话,直接进入下一个分支执行(不进行匹配),这种现象称为case穿透现象。[提供break语句可以避免穿透]
-
6.所有的分支都没有匹配成功的话,当有default语句的话就会执行default分支当中的程序。
-
7.switch或者case后面只能是int或者string类型的数据,不能是其他类型
*当然byte、short、char也可以直接写到switch和case后面,因为它们可以进行自动类型转换,byte、short、char可以自动转换成int类型
*JDK6中switch和case只能探测int类型,JDK7及之后的jdk版本,引入新特性,switch关键字后面可以探测int类型和string类型的数据。
-
8.case可以合并:
int i = 10 ; switch(i){ case 1: case 2: case 3: case 10: System.out.println("Test Code!"); }例子1:
public class App { public static void main(String[] args) throws Exception { //接收用户的输入: //1 表示星期一 //2 表示星期二 //3 表示星期三 //... //7 表示星期日 java.util.Scanner s = new java.util.Scanner(System.in); System.out.println("请输入数字:"); int num = s.nextInt(); 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; } } }[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xDYvTXU5-1658301427378)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510142103258.png)]
例子2:case穿透
public class App { public static void main(String[] args) throws Exception { java.util.Scanner s = new java.util.Scanner(System.in); System.out.println("请输入数字:"); int num = s.nextInt(); switch(num){ case 1: System.out.println("星期一"); case 2: System.out.println("星期二"); case 3: System.out.println("星期三"); case 4: System.out.println("星期四"); case 5: System.out.println("星期五"); case 6: System.out.println("星期六"); case 7: System.out.println("星期日"); } } }[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pMS8fQGY-1658301427379)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510142255548.png)]
例子3:case合并
public class App { public static void main(String[] args) throws Exception { java.util.Scanner s = new java.util.Scanner(System.in); System.out.println("请输入数字:"); int num = s.nextInt(); switch(num){ case 1:case 0: 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; } } }[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdQl7szi-1658301427380)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510142537518.png)]
例子4:String类型
public class App { public static void main(String[] args) throws Exception { java.util.Scanner s = new java.util.Scanner(System.in); System.out.println("请输入星期几:"); String num = s.next(); switch(num){ case "星期一": System.out.println(1); break; case"星期二": System.out.println(2); break; case"星期三": System.out.println(3); break; case"星期四": System.out.println(4); break; case "星期五": System.out.println(5); break; case "星期六": System.out.println(6); break; case "星期日": System.out.println(7); break; } } }[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-55kGwMB9-1658301427380)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510143359399.png)]
例子5:short、byte、char转换成int
public class App { public static void main(String[] args) throws Exception { char c = 66 ; switch(c){ case 'A': System.out.println("高级");break; case 'B': System.out.println("中级");break; case 'C': System.out.println("初级");break; default: System.out.println("出错了!"); } } }[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N7DApmtN-1658301427381)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510144104879.png)]
练习1:实现计算机当中的加减乘除
实现思路:
1.选择所有数据从键盘输入
2.使用switch语句进行判断
3.需要从控制台输入三次:* 第一个数字 * 运算符 * 第二个数字
最终在控制台上是这样一个场景:
欢迎使用简单计算器系统:
请输入第一个数字:10
请输入运算符:+
请输入第二个数字:20
运算结果:10+20=30
public class App { public static void main(String[] args) throws Exception { java.util.Scanner s=new java.util.Scanner(System.in); System.out.println("欢迎使用简单计算器系统:"); System.out.println("请输入第一个数字:"); int num1 = s.nextInt(); System.out.println("请输入运算符:"); String operateor = s.next(); System.out.println("请输入第二个数字:"); int num2 = s.nextInt(); int result = 0; switch(operateor){ case "+": result = num1 + num2; break; case "-": result = num1 - num2; ;break; case "*": result = num1 * num2; ;break; case "/": result = num1 / num2;break; case "%": result = num1 % num2; break; default: System.out.println("出错了!"); } System.out.println("运算结果为:" + num1 + operateor + num2 + "="+ result); } }[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fLB2lQlM-1658301427382)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510150104190.png)]
练习2:判断考生成绩
要求:假设系统给定考生成绩,请判断该考生的成绩等级
1.有效成绩范围[0~100]
2.考试成绩可能带有小数
3.考试成绩和等级之间的对照关系:
[90-100] A
[80-90) B
[70-80) C
[60-70) D
[0-60) E
4.限定只能只用switch语句,不能用if
思路:先将 成绩/10 转换成 0-10 的整数,再判断
public class App { public static void main(String[] args) throws Exception { java.util.Scanner s=new java.util.Scanner(System.in); System.out.println("欢迎使用成绩转换系统:"); System.out.println("请输入成绩:"); int score = s.nextInt(); //转换成int int grade = (int)(score/10); switch(grade){ case 9:case 10: System.out.println("A") ; break; case 8: System.out.println("B") ; break; case 7: System.out.println("C") ; break; case 6: System.out.println("D") ; break; default: System.out.println("E"); } } }[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DqUMVad3-1658301427382)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510152058918.png)]
2.7.4 for语句-
1.循环结构:在程序中总有一些需要反复/重复执行的代码,假设没有循环结构,那么这段需要重复执行的代码自然是需要重复编写的。代码无法得到重复使用。所以多数语言是支持循环结构的
-
2.基本上所有的编程语言纸抽的循环结构包括三种:
- for 循环
- while循环
- do…while循环
-
3.当前示例主要讲解for循环。for循环的语法结构:
for(初始化表达式;布尔表达式;更新表达式){ //需要重复执行的代码片段(循环体:由java语句构成) } -
4.for循环的执行过程/执行原理?
-
初始化表达式、布尔表达式、更新表达式都不是必须的(但是两个分号是必须的)
-
初始化表达式最先执行,并且在整个for循环中只执行一次
-
布尔表达式必须是true或者false,不能是其他值
-
for的执行过程:
1、先执行初始换表达式,并且该表达式只执行一次
2、判断布尔表达式的结果是true还是false
-
布尔表达式为true
*执行循环体
*执行更新表达式
*判断布尔表达式的结果是true还是false
** 布尔表达式为true
**执行循环体
**执行更新表达式
**判断布尔表达式的结果是true还是false
…
-
布尔表达式为false
*循环结束
-
-
例子1:循环输出1-10
public class App { public static void main(String[] args) throws Exception { for(int i = 1;i<=10;i++) {System.out.print(i+" ");} } }[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g3XHEOGo-1658301427391)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510161516062.png)]
例子2:for循环中的作用域
public class App { public static void main(String[] args) throws Exception { //for循环中定义一个i,这个i的作用域在for循环中 for(int i = 1;i<=10;i++) {System.out.print(i+" ");} System.out.println(); for(int i = 0;i<10;i++){ System.out.print(i+" "); } } }[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EABWsvHD-1658301427392)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510162011550.png)]
例子3:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B82wwDhD-1658301427392)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510162725419.png)]
例子4:循环语句和条件判断语句嵌套使用[for和if的嵌套]
public class App { public static void main(String[] args) throws Exception { //找出1-100所有的奇数 //第一种方案:从1开始,每次递增2 for(int i=1;i<=100;i=i+2) {System.out.print(i+" ");} //第二种方案,从1开始,以1递增,每一个数据都进行判断,判断标准是该数字对2求余是否为0 System.out.println(); for(int i=1;i<=100;i++){ if(i%2!=0) System.out.print(i+" "); } } }[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rXJ9bxy2-1658301427393)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510163806720.png)]
例子5:在前一个程序上计算1-100所有奇数之和
public class App { public static void main(String[] args) throws Exception { int sum=0; for(int i=1;i<=100;i=i+2) { sum=i+sum;} System.out.print(sum); } }[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7JMuBLf9-1658301427394)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510170148780.png)]
例子6:for循环中嵌套for循环
public class App { public static void main(String[] args) throws Exception { for(int i=1;i<=10;i++) for(int j=1;j<=10;j++) System.out.print(j+" "); } }[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-am5riU6U-1658301427394)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510171435366.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F6JiLWBU-1658301427395)(C:Users李AppDataRoamingTyporatypora-user-imagesimage-20220510171835952.png)]
-



