javase(二)
流程控制语句
顺序结构
- 语句从上到下依次执行
选择结构
if语句
注意事项
- 大括号的开头建议写在第一行的末尾(另起一行不影响)
- 在语句体中,如果只有一句代码,大括号可以省略不写(不建议)
- 如果对一个布尔类型的变量进行判断,不要用==号
if语句单选泽
-
if(关系表达式){ 语句体; }
-
//例 if(age>18){ system.out.println("成年了"); } //如果age大于18就输出成年了
if语句双选择
-
if(关系表达式){ 语句体; }else{ 语句体2; }
-
//例 if(age>18){ system.out.println("成年了"); }else{ system.out.println("未成年"); } //如果age大于18输出成年了,否则输出未成年
if语句多选择
-
if(关系表达式){ 语句体; }else if(关系表达式2){ 语句体2; }else if(关系表达式3...){ 语句体3; }else{ 语句体4....; }
-
//例 if(score>=95 && score<=100){ System.out.println("自行车一辆"); }else if(score>=90 && score<=94){ System.out.println("游乐场玩一天"); }else if(score>=80 && score<=89){ System.out.println("变形金刚一个"); }else if(score<80 && score >=0){ System.out.println("好好学习"); }else{ System.out.println("你分数有毛病"); } //如果分数在95-100输出自行车一辆 //如果分数在90-94输出游乐场玩一天 //如果分数在80-89输出变形金刚一个 //如果分数在0-80输出好好学习 //如果分数都不在以上范围,输出你分数有毛病
switch语句
判断一个变量与一系列中某个值是否相等,每个值称为一个分支
-
支持字面量和字符串常量类型
-
default的位置和省略
- 可以省略(不建议),位置可以任意放(建议放最下面)
-
case多值简化写法:case 值1,2,3,.....
-
case穿透
- 语句体没有遇到break就不会停止,语句代码会一直执行下一个case
- 直到遇到break或者语句结束
-
jdk12新特性
-
swtich(表达式){ case 值1 -> {语句体;}{ case 值2 -> {语句体2;} .... default:->{语句体;} }
-
不会触发case的穿透
-
结构
-
switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; case 值3: 语句体3; break; ....... default: 语句体; }
-
char a = 'A'; switch(a){ case 'A': System.out.println("A"); break; case 'B': System.out.println("B"); break; default: System.out.println("其他"); } //如果a的值为A,输出A,并且结束当前语句 //如果a的值为B,输出B,并且结束当前语句 //如果a的值不在A,B,执行default,输出其他,并且结束当前语句
循环结构
while循环
-
while(条件判断语句){ //循环体 }
-
只要条件判断语句为true,循环就会一直执行下去,称为死循环
-
死循环会影响程序性能,程序卡死崩溃,所以正常情况下应该避免死循环
-
大多数情况下是会让循环停止下来的,需要一个让表达式失效的方式来结束循环
-
少部分情况下需要死循环,比如服务器的请求响应监听
do..while循环
-
do{ 循环体 }while(条件判断语句);
-
while和do...while的区别
- while是先判断后执行,do..while是先执行后判断
- do...while至少会被执行一次
for循环
-
虽然所有循环结构都可以使用while或者do..while表示
-
但java提供了另外一种语句----for循环,使一些循环结构变得更加简单
-
for循环语句是支持迭代的一种通用结构,是最有效,最灵活的循环结构
-
for循环执行的次数是在执行前就确定的,语法格式如下:
-
for(初始化;条件判断语句;件控制语句){ //循环体 }
-
初始化语句只会执行一次,判断是true还是false,true执行,反之不执行,并且可以为空
-
如果三个参数都为空,为死循环
-
增强for循环
-
for(声明语句 : 表达式){ 循环体 }
- 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配.
- 作用域限定在循环语句快,其值与此时数组元素的值相等
- 表达式:表达式是要访问的数组名,或者是返回值为数组的方法
break,continent与goto关键字
- break在任何循环语句的主体部分,均可用break控制循环的流程.
- break用于强行退出循环,不执行循环中剩余的语句.(break可以在switch语句中使用)
- continue语句用在循环语句体中,用于终止某次循环过程(跳过循环体中尚未执行的语句)
- 接着进行下一次是否执行循环的判断
- goto关键字
- 一个保留的关键字
方法
- 方法是语句的集合,他们在一起执行一个功能
- 方法是解决一类问题的步骤的有序组合
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
- 设计原则
- 方法的本意是功能块,就是实现某个功能的语句块的集合.
- 设计方法的时候,最好保持方法的原子性,
- 就是一个方法只完成一个功能,这样利于后期的扩展
定义
方法的定义要写在main方法的外部
方法是一段用来特定功能的代码片段,一般情况下,定义一个方法包含以下语法:
- 方法包含一个方法头和一个方法体,下面是一个方法的所有部分:
- 修饰符:修饰符是可以选的,告诉编译器如何调用该方法,定义了该方法的访问类型
- 返回值类型:方法可能有返回值.有返回值时需要写上返回值的数据类型.有些方法没有返回值,没有返回值时,填void.
- 方法名:是方法的实际名称,方法名和参数表共同构成方法签名
- 参数类型:参数像是一个占位符,当方法被调用时,传递值给参数,这个值被称为实参或者变量,参数列表是指方法的参数类型,顺序和参数的个数,参数是可选的,方法可以不包含任何参数.
- 形式参数:在方法被调用时用于接收外界输入的数据
- 实参:调用方法时实际传给方法的数据
- 方法体:方法体包含具体的语句,定义该方法的功能.
调用
-
调用方法:对象名.方法名(实参列表)
-
当方法返回一个值时,方法调用通常被当做一个值,例
-
int a = max(10,20);
-
-
如果方法返回值是void,方法调用是一条语句
-
max(10,20);
-
重载
重载就是一个类中,有相同的方法名,但形参不同的方法
- 方法重载规则
- 方法名称必须相同
- 参数列表必须不同(个数,类型,参数排列顺序不同等)
- 方法的返回类型可以相同也可以不相同
- 仅仅返回类型不同不足以成为方法的重载
递归
方法自己调用自己
- 递归可以用简单的程序来解决一些复杂的问题.他通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述除解题过程所需要的多次重复计算,大大的减少了程序的代码量,递归的能力在于用有限的语句来定义对象的无限集合.
- 递归结构:
- 递归头:什么时候不调用自身方法,如果没有头,将陷入死循环
- 递归体:什么时候需要调用自身方法.
数组
- 数组是相同类型数据的有序集合
- 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
- 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问他们
- 数组的名字是首元素的地址
特点
- 数组的长度是确定的.数组一旦被创建,它的大小就是不可以改变的.
- 其元素必须是相同类型,不允许出现混合类型
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型
- 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量.数组本身就是对象,java中对象是在堆中的,因此数组无论保存原始类型还其他对象类型,数组对象本身是在堆中的
定义
-
数据类型[] 数组名; 数据类型 数组名[];
-
//例 int arr[]; //或 int[] arr;
初始化
静态初始化
-
数据类型 数组名[] = new 数据类型[]{元素1,元素2...}; 数据类型[] 数组名 = new 数据类型[]{元素1,元素2...};
-
简写
-
数据类型 数组名[] = {元素1,元素2...}; 数据类型[] 数组名 = {元素1,元素2...};
-
//例 int arr[] = {10,20,30}; //或者 int[] arr = {10,20,30};
动态初始化
-
数据类型[] 数组名 = new 数据类型[元素个数]; 数据类型 数组名[] = new 数据类型[元素个数];
-
//例 int arr[] = new int[10]; //或者 int[] arr[] = new int[10];
-
数组的默认初始化
- 数组是用于类型,它的元素相当于类的实例变量,因此数组一经分配空间.其中的每个元素也被按照实例变量同样的方式被隐式初始化.(初始化为0)
访问
-
结构:数组名[索引]; //索引是从0开始的 //例 arr[0];
重新赋值
-
结构:数组名[索引] = 新值; //索引是从0开始的 //例 arr[0] = 10;
-
遍历
- 获取数组数据的过程
-
数组的长度
- 数组名.length
- 下标合法区间:[0,length-1]
Arrays类
- 给数组赋值:fill
- 给数组排序:sort(升序)
- 比较数组:equals
- 查找数组元素:binarySearch(二分查找法)
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术