方法
1. 概述
-
概述:就是一段具有独立功能的代码块,不调用就不执行
-
作用:
-
如果程序里面有好几段内容是需要实现相同功能,不使用方法的话,会导致有大量重复的代码。这种重复代码每次都要重新写一遍。所以如果不用方法,代码的重复度太高,复用性太差
-
方法的出现,把重复代码变成类似于‘共享单车’的存在,谁有需要就直接用。提高了代码的复用性
-
-
前提:
- 方法必须是先创建才可以使用,该过程称为方法定义
- 方法创建后并不是直接运行的,需要手动在代码中调用后才可以执行,该过程称为方法调用
2. 方法的定义和调用
- 格式
//方法定义格式(无参数、无返回值的公共静态方法)
public static void 方法名(){
//方法体:就是需要复用(被反复使用)的逻辑代码
}
//范例
public static void printHello(){
System.out.println("Hello method!");
}
//方法调用:方法名();
//范例:
public static void main(String[] args) {
printHello();
}
-
注意事项
- 方法必须先定义后调用,否则程序将报错
- 方法与方法之间是平级关系,不能嵌套定义
3. 方法的调用过程
- 方法没有被低调用的时候,都在方法区中的字节码文件(.class)中存储
- 方法被调用的时候,需要进入到栈内存中运行
4. 练习:奇偶数判断
- 需求
-
思路
-
代码演示
public static void main(String[] args){
//3.调用方法
method();
}
//1.定义一个方法,功能为:判断一个数是否为奇数或者偶数
public static void method(){
//2.判断奇偶数逻辑
int a=10;
if(a%2==0){
System.out.println("偶数");
}else{
System.out.println("奇数");
}
}
5. 带参数方法的定义和调用
-
为什么要有带参数方法
- 当方法内部逻辑有用到需要根据不同用户,不同需求去变化的值的时候,就可以定义带参数方法,把这种可能会改变的值用方法的参数替代
-
带参数方法的定义
//单个参数
public static void 方法名(数据类型 变量名){方法体;}
//范例
public static void method(int num){方法体;}
//多个参数
public static void 方法名(数据类型 变量名1,数据类型 变量名2,...){方法体;}
//范例
public static void getMax(int num1,int num2){方法体;}
//注意
//1.方法定义时,参数中的数据类型与变量名都不能缺少,缺少任意一个程序都将报错
//2.方法定义时,多个参数之间使用逗号分隔
- 带参数方法的调用
- 代码练习
/*
* 练习1:定义一个方法,接收一个int类型的参数,判断该数字是是奇数还是偶数,在控制台打印出来。
* 在主方法中调用
*/
/*
* 练习2:定义一个方法,接收两个int类型的数字,判断哪个数字是最大值,打印最大值
* 在主方法中调用
*/
6. 形参和实参
- 概念
- 形参:形式参数,是指方法定义中的参数
- 实参:实际参数,方法调用中的参数
7. 带参数方法的练习:打印n~m之间所有的奇数
-
需求:设计一个方法(print)用于打印n到m之间所有的奇数
-
思路:
8. 带返回值方法的定义和调用
-
为什么要有带返回值的方法
- 我们经常会根据一个方法产出的结果,来去组织另外一段代码逻辑,为了拿到这个方法产生的结果,就需要定义带有返回值的方法
-
带返回值方法的定义
-
带返回值方法的调用
-
代码演示
//案例:计算两个数的乘积
public static void main(String[] args) {
//3.调用方法,因为方法定义了两个参数,都是整数,所以这里要给两个整数的实参
//4.因为方法有返回值,所以可以在方法调用处使用一个变量接收这个方法调用完的返回值
//5.方法返回值什么类型,接收的变量就应该是什么类型
int result = cheng(2, 3);
System.out.println(result);//结果:6
}
//1.两个整数的乘积,结果还是整数,所以返回值类型应该为int
public static int cheng(int num1,int num2) {
//2.通过return关键,返回乘积
return num1 * num2;
}
9. 带返回值方法的练习:求两个数的最大值
-
需求:设计一个方法可以获取两个数的较大值,数据来自于参数
-
思路:
```java
10. 方法的注意事项
-
方法不能嵌套定义
-
方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写,如果要写return语句,后面不能跟具体的数据
-
return语句下面,不能编写代码,因为永远执行不到,属于无效代码
-
return语句,如果要返回值,只能带回一个结果
//案例:没有返回值的方法,可以省略return不写
public static void eat(){
System.out.println("吃饭");
//return的其中一个作用,是结束整个方法,但是不可以带返回值
return;
//return 3; 方法本身没有规定返回值,在此处就不能带返回值,因为你也不知道返回什么类型比较合适
}
//案例:计算器加法运算
public static int add(int num1,int num2){
// return的第二个作用,就是返回一个值
return num1+num2;
}
//案例:return语句下面,不能编写代码
public static void drink(int age){
if(age<8){
System.out.println("喝白开水");
//此处是个if判断语句,按照逻辑推断,如果进入if语句中,下面的代码逻辑肯定是不想再执行
//如果此处不加以限制,if执行结束,代码依然会执行:喝红牛
//所以此处可以加上return,直接结束方法
return;
//注意,说的return下面不能加代码,是指同一个逻辑代码块(大括号)中而已
}
System.out.println("喝红牛");
}
12. 方法重载
-
概念:在同一个类中,方法名相同,参数列表不同(参数顺序不同也算不同,变量名不同不算)的多个方法,形成了方法的重载。
-
方法签名:JVM调用方法的时候是通过方法签名去区分的,方法签名包括方法名,参数数量、类型和顺序
-
注意:参数顺序不同虽然也可以构成方法重载,但是不推荐,没有意义
## 13. 方法参数传递:基本数据类型
- 方法的形参在内存当中也就是一个变量而已
- 一个方法在传递参数的时候,如果是基本数据类型,那么传递的就是该变量所记录的具体的数值
```java
public static void main(String[] args) {
int number = 100;
System.out.println("main方法中,调用change方法前:" + number);//结果:100
//基本数据类型,传递的是number的数值,而非变量
change(number);
//打印的变量,依然还是main方法中的变量,此变量的值未有任何改变,依然是100
System.out.println("main方法中,调用change方法后:" + number);//结果:100
}
//方法的形参相当于是这个方法中的一个局部变量,属于change方法,和main方法中的变量不是同一个
public static void change(int number) {
//在未执行下方赋值操作时,从main方法传递过来的是值100,将100赋值给了change方法的变量number
//此时修改的是change方法中的变量number值,对main方法中的number无影响
number = 200;
System.out.println("在change方法中的:" + number);//结果:200
}
}
```java
```java