一、方法的定义
方法类似于其它语言的功能子函数,是一段用来完成特定功能的代码段。
例如下面代码中,当分别计算10累加到20、20累加到50、100累加到200时,其代码都是使用for循环,使循环的初始值都为开始加的数字,循环到结束的数字。故三者的代码除了循环的初始值和结束值不同,其余都是一样的。所以把该代码段写成一个独立的方法(类似于C语言中的功能子函数)。当要实现从某个值累加到某个值时,直接调用该方法即可。方法类似于其它语言的功能子函数,是一段用来完成特定功能的代码段。
public static void main(String[] args) {
// 计算10---20累加的和
int sum1 = sum(10,20);
System.out.println("10到20累加的和:" + sum1);
// 计算20---50累加的和
int sum2 = sum(20,50);
System.out.println("20---50累加的和:" + sum2);
// 计算100 ---200累加的和
int sum3 = sum(100,200);
System.out.println("100---200累加的和:" + sum3);
}
public static int sum(int begin,int end) {
int sum = 0;
for(int i = begin; i <= end; i++)
sum += i;
return sum;
}
二、定义方法的基本格式:
1.当参数列表中有多个相同数据类型的形参,声明时也只能分开声明(int num1,int num2),不能一起声明(int num1,num2)。
2.访问权限修饰符不写时,默认为default。
3.在没有返回值的函数中使用return时, return单独成立一条语句, 类似于break或者continue,后面不能跟任何的数值其作用是结束整个方法;
在一个有返回值的函数中使用return 这种情况下函数中必须出现return return后面必须跟一个具体的数值,而且数值的类型和返回值类型必须保持一致 作用:结束整个方法,并且将返回值携带给调用者。
访问权限修饰符 其他修饰符 返回值类型 方法名称(参数列表) {
//方法体
return 返回值;
//如果返回值类型void ,可以不用写return
}
三、方法的调用
语法:方法名称(实参列表);
- a.实参的数量和类型必须和形参保持完全的一致。
- b.方法之间只能进行调用,而不能在方法中声明方法,声明的方法和main方法是并列的
- c.如果定义方法有返回值,运算的结果会返回给调用者,调用者需要定义变量接收数据
- 参数的传递是值传递
public class PassByValueTest {
public static void swap(int num1,int num2) {
int temp = num1;
num1 = num2;
num2 = temp;
System.out.printf("swap方法===> num1 = %d,num2 = %d",num1,num2);
}
public static void main(String[] args) {
int num1 = 100; //实参
int num2 = 200;
System.out.printf("swap前===> num1 = %d,num2 = %d",num1,num2);
swap(num1, num2);
System.out.printf("swap后===> num1 = %d,num2 = %d",num1,num2);
}
}
swap前===> num1 = 100,num2 = 200
swap方法===> num1 = 200,num2 = 100
swap后===> num1 = 100,num2 = 200
方法里的变量只在方法里起作用,即方法里的变量作用域只在方法里。
下面通过堆栈图演示整个程序执行过程。
1步.main方法入栈
2步.swap方法入栈
3.swap方法执行过程:实参传递给形参之后,swap方法内部num1=100,num2=200;执行完交换后
swap方法内部num1=200,num2=100。
4.swap方法执行完成后出栈销毁,main方法里num1值仍为原始值100,num2值仍为原始值200。所以最后打印时,num1=100,num2=200。
四、方法的优点好处
1.把复用的逻辑抽取出来,封装成方法,提高代码的重用性
2.实现相对独立的逻辑,提高代码的维护性,把错误限定在方法内
3.可以对具体实现进行隐藏、封装,让代码看起来更简洁 清晰
- 简化代码,提高代码的可读性,可维护性,可重用性
五、方法的重载
同一个类中,方法名相同,参数列表不同,即为方法重载。(和方法的修饰符和返回值类型无关)
参数列表的不同包括:
参数个数不同:max(int num1, int num2) max(int num1, int num2,int num3)
参数数据类型不同:max(int num1, int num2) max(float num1, float num2)
参数顺序不同:max(int num1, float num2) max(float num1, int num2)
六、扩展
区分什么是类方法和实例方法
- 类方法:
使用static修饰的方法
,是属于当前整个类的,而不是属于某个实例的,只能处理static域或调用static方法。- 实例方法:
- 属于对象的方法,由对象来调用。
public class Demo {
float a;
//实例方法
void sum(float num1,float num2){
a = Max(num1,num2);
}
//类方法
static float Max(float num1,float num2){
//取最大值
return num1 <= num2 ? num2 :num1;
}
public static void main(String[] args) {
Demo demo =new Demo();
demo.sum(22,33); //实例方法必需先初始化类的实例,然后通过类的实例才能调用
Demo.Max(12,9); // 类方法可以直接通过类名调用
}
}
- 一个类中的方法可以互相调用。但要注意:实例方法可以调用该类中的其他方法,例如,sum()可以调用Max()。类方法只能调用其他类方法,不能调用实例方法。
- 类方法又叫静态方法, 实例方法又叫非静态方法。
- 类方法可以直接通过类名调用,实例方法必需先初始化类的实例,然后通过类的实例才能调用
- 知识点小结
- Java中的方法分为类方法和实例方法,区别是类方法中有static修饰,为静态方法,是类的方法。所以在类文件加载到内存时就已经创建,但是实例方法是对象的方法,只有对象创建后才起作用,所以在类方法中不能调用实例方法,但实例方法中可以调用类方法,且实例方法可以互相调用。
一般情况下一个方法包含以下语法:
修饰符:这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
返回值类型:方法可能会返回值。没有返回值returnValueType是关键字void。
方法名:是方法的实际名称,方法名和参数表共同构成方法签名。
参数类型:参数像是一个占位符。当方法被调用时,传递给参数,这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
形式参数:在方法被调用时用于接收外界输入的数据。
实参:调用方法时实际传给方法的数据。
方法体:方法体包含具体的语句,定义该方法的功能