Java03方法&流程控制语句
一、方法
1、方法介绍
方法(method),一段具有独立功能的代码块,不调用就不执行。可以将挤在一起的臃肿代码按照功能进行分类管理
方法的出现,可以提高代码的复用性
public class Test {
public static void main(String[] args) {
login();
addStudent ();
deleteStuent();
updateStudent();
queryStudent();
}
/** 登录 */
public static void login(){ ... }
/** 添加学生 */
public static void addStudent(){ ... } /** 删除学生 */
public static void deleteStudent(){ ...} /** 修改学生 */
public static void updateStudent(){ ...} /** 查看学生 */
public static void queryStudents(){...}
}
2、方法的定义和调用格式
2.1 定义格式&调用格式
//show方法
public static void show(){
//方法体
}
show(); //用方法名调用show方法
2.2 带参方法的定义和调用
为了方法中使用的数据更灵活,需要尽可能带参定义
//带一个参数的方法
public static void call(String name){
//方法体
}
call("Tom"); //传入对应类型的参数调用call方法
//带两个参数的方法
public static void add(int a ,int b){
//方法体
}
add(10,20); //传入对应参数调用add方法
-
形参和实参
-
形参:全称形式参数,是指在定义方法时,所声明的参数
-
实参:全称实际参数,调用方法时,所传入的参数
-
2.3 带返回值方法的定义和调用
我们经常会根据一个方法产出的结果,来去组织另外一段代码逻辑,为了拿到这个方法产生的结果,就需要定义带有返回值的方法
//带返回值的方法定义
public static int add(int a,int b){
int c = a + b;
return c; //返回值
}
//带返回值的方法调用方式有以下三种
//1、直接调用(不推荐)
add(10,20);
//2、赋值调用(推荐)
int result = add(10,20);
//3、输出调用(偶尔)
System.out.printIn("和为:" + add(10,20));
3、方法的通用定义格式
//方法名要见名知义,采用小驼峰命名法;形参列表表示方法运
public static 返回值类型 方法名(形式参数列表){ 行需要的数据
方法体; //方法体是方法中管理逻辑的代码
return 数据;
}
注意事项:
-
定义方法的两个明确
-
明确参数的类型和数量
-
明确返回值类型。如果有返回值,明确对应类型;如果没有,写void
-
-
调用方法时注意void类型的方法,直接调用即可;非void类型的方法,推荐使用变量接收调用
4、方法的常见问题
4.1 方法的内存图解
-
Debug查看方法的执行流程
-
方法调用的内存图解
方法没有被调用的时候,在方法区中的字节码文件中存放;方法被调用的时候,需要进入到栈内存中运行
4.2 方法的注意事项
-
方法不调用就不执行
-
方法与方法之间是平级关系,不能嵌套定义
-
方法的编写顺序和执行顺序无关
-
方法的值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写;如果要编写return,后面不能跟具体的数据
public class MethodDemo{ public static void method(){ //代码片段 return; //这句代码不写也可以 } }
-
return语句下面,不能编写代码,因为永远执行不到,属于无效代码
public class MethodDemo{ public static void method(){ //代码片段 return; //这句代码不写也可以 System.out.printIn("卑微代码"); //并不执行 } }
5、方法重载
在同一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系。调用方法的时候,Java虚拟机会通过参数的不同来区分同名的方法。
public class Test {
public static int add(int a, int b) {
return a + b;
}
public static double add(double a, double b) {
return a + b;
}
public static int add(int a, int b, int c) {
return a + b + c;
}
public static double add(double a, double b, double c) {
return a + b + c;
}
}
注意:识别方法是否重载关系,只看方法名和参数,跟返回值无关!!!
简单理解:就是同一个类中,方法名相同,参数不同的方法。其中参数不同包括个数不同、类型不同、顺序不同。
二、流程控制语句
流程控制语句即通过一些语句,来控制程序的【执行】流程,包括顺序结构、分支结构和循环结构。
1、顺序结构(程序默认)
顺序结构没有特定的语法结构,按照代码的先后顺序,依次执行。程序中大多数的代码都是这样执行的。
2、分支结构(if、switch)
2.1 if语句
-
if第一种格式
if(判断条件){ 语句体; }
执行流程:①首先计算判断条件的结果
②如果条件的结果为 true 就执行语句体
③如果条件的结果为 false 就不执行语句体
-
if第二种格式
if(判断条件){ 语句体1; }else{ 语句体2; }
执行流程:①首先计算判断条件的结果
②如果条件的结果为 true 就执行语句体1
③如果条件的结果为 false 就执行语句体2
-
if第三种格式
if(判断条件1){ 语句体1; }else if(判断条件2){ 语句体2; } ... else{ 语句体n+1; }
执行流程:①首先计算判断条件1的值
②如果值为true就执行语句体1;如果值为false就计算判断条件2的值
③如果值为true就执行语句体2;如果值为false就计算判断条件3的值
④...
⑤如果没有任何判断条件为true,就执行语句体n+1。
-
注意事项:①if 语句中,如果大括号控制的是一条语句,大括号可以省略不写;
②if 语句的 ( ) 和 { } 之间不要写分号;
③if语句中需要保证是boolean类型的true、false才符合语法要求;
2.2 switch语句
-
格式
switch(表达式) { //表达式为将要匹配的值 case 值1: //case后面是被匹配的值 语句体1; break; //中断、结束,用于结束switch语句 case 值2: 语句体2; break; … default: //表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似 语句体n+1; break; }
switch语句可以接收的数据类型为byte、short、int、char。JDK5以后可以是枚举类型,JDK7以后可以是String
-
执行流程:
①拿着表达式的值,依次和case后面的值进行匹配,匹配成功,就会执行对应的语句,在执行的过程中,遇到break就会结束。
②如果所有的case都不匹配,就会执行default里面的语句体,然后程序结束掉。
-
注意事项:①case给出的值不允许重复
②case后面的值只能是常量(字面量),不能是变量
③switch语句如果省略了break,将会开启case穿透现象
/* 需求:键盘录入一个数值 1-5输出工作日 6-7输出休息日 */ public class SwitchTest { public static void main(String[] args) { Scanner sc =new Scanner(System.in); System.out.println("请输入:"); int weak = sc.nextInt(); //多个case中有重复代码,建议使用case穿透优化代码 switch(weak) { case 1: case 2: case 3: case 4: case 5: System.out.println("工作日"); break; case 6: case 7: System.out.println("休息日"); break; default: System.out.println("您的输入有误,请检查!"); } } } //jdk14版本新特性:case后面允许编写多个值,使用逗号分隔 switch(weak) { case 1,2,3,4,5: System.out.println("工作日"); break; case 6,7: System.out.println("休息日"); break; default: System.out.println("您的输入有误,请检查!"); break; }
3、循环结构(for、while、do...while)
待更新......