方法概述
方法是具有特定功能的代码集合,由于我们是把重复的代码写到方法当中,以后要用直接调用方法即可,不需要再写一遍了。代码相当于只写了一遍。所以可以提高代码的复用性。如果要修改代码,我们也只要修改一处即可,所以方法还可以提高代码的可维护性。
方法到底要学什么?
方法需要先定义,才能使用,方法的定义,也叫做创建方法。
方法里面的代码不会主动执行,需要手动调用,才能执行。
学方法就是学两个:
-
方法如何定义
-
方法如何调用
定义格式:
public static void 方法名 () {
// 方法体;
}
调用格式:
方法名();
注:方法与方法之间是平级关系,不能嵌套调用。
public class Demo1 {
//入口方法
public static void main(String[] args) {
//方法调用
eat();
System.out.println("主方法执行");
}
//方法定义
public static void eat() {
//方法调用
sleep();
System.out.println("吃饭");
}
//方法定义
public static void sleep() {
System.out.println("睡觉");
}
}
方法的调用过程
-
方法没被调用前在方法区中的字节码文件中,调用后进入栈内存。
-
栈内存有什么特点?先进后出。
方法1 方法2 方法3 依次进栈,然后是 方法3 方法2 方法1 依次出栈。
方法调用1:
方法调用2:
有参数无返回值方法的定义和调用
定义格式:参数:由数据类型和变量名组成
public static void 方法名 (参数1) {
方法体;
}
// 当有多个参数时,通过逗号分隔。
public static void 方法名 (参数1, 参数2, 参数3...) {
方法体;
}
调用格式:
方法名(参数);
方法名(参数1,参数2);
===========================
isEvenNumber(10);
getMax(10,20);
注:方法调用时,参数的数量和类型必须与方法定义中的设置相匹配,否则程序将报错
public class Demo2 {
public static void main(String[] args) {
//带参数方法调用
isEvenNumber(10);
}
//定义带参数的方法
public static void isEvenNumber(int num) {
if (num % 2 == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}
}
}
形参和实参
-
形参:方法定义中的参数
等同于变量定义格式,例如:int number
-
实参:方法调用中的参数
等同于使用变量或常量,例如: 10 number
public class Example {
public void printMessage(String message) { // String message 是形参
System.out.println(message);
}
}
public class Main {
public static void main(String[] args) {
Example example = new Example();
example.printMessage("Hello, World!"); // "Hello, World!" 是实参
}
}
方法练习-打印n-m之间所有的奇数
-
需求:定义一个方法(print) 用于打印 n 到 m 之间所有的奇数
-
思路:
1:定义方法,名称为print 2:为方法添加两个int类型的形参,准备接受调用者传递过来的实参 3:方法中设计for循环,循环从n开始,到m结束 4:循环中加入if判断,是奇数,则打印 5:main方法中调用print方法,传入两个实际参数
public class Demo2Method {
public static void main(String[] args) {
// 5:main方法中调用print方法,传入两个实际参数
print(10,20);
}
//1:定义方法,名称为print
// 2:为方法添加两个int类型的形参,准备接受调用者传递过来的实参
public static void print(int n, int m){
//健壮性
if(n>m){
System.out.println("参数有误");
return;
}
System.out.println(n + "到" + m + "之间的奇数为:");
// 3:方法中设计for循环,循环从n开始,到m结束
for(int i = n; i <= m; i++){
// 4:循环中加入if判断,是奇数,则打印
if(i % 2 == 1){
System.out.println(i);
}
}
}
}
有参数有返回方法的定义和调用
-
为什么要有带返回值的方法
我们需要根据一个方法产出的结果来组织另外一段代码的逻辑,为了拿到这个方法产出的结果,就需要定义带返回值的方法。
-
定义格式
public static 返回值数据类型 方法名 ( 参数 ) {
return 数据 ;
}
public static boolean isEvenNumber( int number ) {
return true ;
}
public static int getMax( int a, int b ) {
return 100 ;
}
注:方法定义时return后面的返回值与方法定义上的返回值数据类型要匹配,否则程序将报错
调用格式:
方法名 ( 参数 ) ;
数据类型 变量名 = 方法名 ( 参数 ) ;
isEvenNumber ( 5 ) ;
boolean flag = isEvenNumber ( 5 );
方法的通用格式(掌握)
public static void/返回值数据类型 方法名(参数) {
方法体;
return 数据 ;
}
-
解释:
-
public static 修饰符,目前先记住这个格式
返回值数据类型 方法操作完毕之后返回的数据的数据类型
如果方法操作完毕,没有数据返回,这里写void,而且方法体中一般不写return
方法名 调用方法时候使用的标识
参数 由数据类型和变量名组成,多个参数之间用逗号隔开
方法体 完成功能的代码块
return 如果方法操作完毕,有数据返回,用于把数据返回给调用者
-
-
定义方法时,要做到三个明确
-
方法要干什么? 对应我们的方法体。
-
明确参数:我们要干这件事,需要什么材料。
-
-
明确返回值类型:主要是明确方法操作完毕之后是否有数据返回,如果没有,写void;如果有,写对应的数据类型
-
调用方法时的注意:
-
void类型的方法,直接调用即可
-
非void类型的方法,推荐用变量接收调用
-
方法重载
-
概念
二同三不同二无关。
同一个类中的同名方法;
参数的个数、类型、顺序不同;
与返回值无关,与形参的名称无关;
-
作用
针对于方法的编写者而言:相同功能的方法,只要起一个名字即可。
针对于方法的使用者而言:相同功能的方法,也只要记忆一个名字就可以了。
-
正确范例:
public class MethodDemo {
public static void fn(int a) {
//方法体
}
public static void fn(int b) {
//方法体
}
public static int fn(double a) {
//方法体
}
}
public class MethodDemo {
public static float fn(int a) {
//方法体
}
public static int fn(int a , int b) {
//方法体
}
}