方法类似于其它语言的功能子函数,是一段用来完成特定功能的代码段。
例如下面代码中,当分别计算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 }
语法:方法名称(实参列表);
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。
方法名:是方法的实际名称,方法名和参数表共同构成方法签名。
参数类型:参数像是一个占位符。当方法被调用时,传递给参数,这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
形式参数:在方法被调用时用于接收外界输入的数据。
实参:调用方法时实际传给方法的数据。
方法体:方法体包含具体的语句,定义该方法的功能