方法是后面所讲面向对象部分中类或对象的行为功能的抽象,是类或对象最重要的组成部分。但从功能上来看,方法就是封装特殊功能的代码块,我们可以将main方法中多次重复操作的功能性代码抽取出来,封装到方法中,以便可以重复使用。需要注意的是,Java中的方法不能独立存在,所有的方法都必须定义在类中或接口中。
1.方法的好处
提高代码的复用性,减少代码的书写量,从而提高开发效率。
将程序中每个功能性的代码进行独立,从而降低代码的耦合性。
耦合性,也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。
2.定义方法的格式
修饰符 返回值类型 方法名 (形参类型1 形参名1 ,形参类型2 形参名2 , ...... ,形参类型n 形参名n) { 方法体; return 返回值; } 修饰符:目前没有学习修饰符,暂时用 public static 固定写法进行替代; 返回值类型:方法运行结果(返回值)的数据类型,方法执行完毕后将结果数据返回到调用者方法;方法的返 回值类型可以是以下几种: 基本数据类型:四类八种 引用数据类型:数组,类,接口 无返回值类型:void 方法名:给方法起的名字,需做到"见名知意"; ():形参列表,方法在执行的过程中需要使用调用者方法中的数据时,因为作用域的原因无法直接使用,需要 通过参数传递的方式将数据传递过来;形参的数据类型可以是以下几种: 基本数据类型:四类八种 引用数据类型:数组,类,接口 无参数:()形参列表中什么都不写 方法体:在原有程序中抽取的特殊功能代码; return: (1):结束方法; (2):如果return关键字的后面有返回值,在结束方法的同时将返回值返回给调用者方法 返回值:方法体执行的最终结果;
3.定义方法的两个明确
-
返回值类型:
-
明确方法返回值的数据类型
-
-
形参列表:
-
明确形参列表中需要使用调用者方法中几个数据
-
明确每个数据的数据类型分别是什么
-
4.方法调用
方法的特点
-
不调用,不执行
方法的调用格式分类
-
如果调用属于类的方法
类名.方法名(实参);
-
如果调用属于对象的方法
对象名.方法名(实参);
-
如果调用同一个类中的方法
-
直接调用,格式如下:
方法名(实参);
-
输出调用,格式如下:
System.out.println(方法名(实参));
-
赋值调用,格式如下:
数据类型 变量名 = 方法名(实参);
-
5.形式参数和实际参数
-
形式参数:在定义方法时方法名后面()中的变量称为形式参数(简称形参)。
-
实际参数:在调用方法时方法名后面()中的参数称为实际参数(简称实参)。
// 需求:定义方法实现两个整数的求和计算 public class MethodDemo2 { public static void main(String[] args) { // 直接调用 // getSum(3,4); // 输出调用 // System.out.println(getSum(3,4)); // 赋值调用 int sum = getSum(3,4); //通过getSum(3,4)找到同一个类中的getSum(int a, int b),代码从第10行,直接跳到第20行,同时将3和4一起带过去 System.out.println("sum = " + sum); } /* 定义计算两个整数求和的方法 两个明确: 返回值类型:int 形参列表:int a,int b */public static int getSum(int a, int b) { // return a + b; } }
6.void关键字
void关键字:方法没有返回值
void关键字注意事项:
在方法没有合适的返回值的时候,定义方法时返回值类型的位置不能什么都不写,需要用到void关键字进行占位;
当方法的返回值类型是void时,调用的方式只能是直接调用
方法返回值类型为void时,只能使用直接调用
方法返回值类型不是void时,推荐使用赋值调用
当方法的返回值类型是void时,方法后面的return关键字可以省略不写
7.方法的重载(overload)
方法重载:在统一各类中,方法名相同,形参列表不同的方法
重载的特点
必须在同一个类中(或者继承类)
方法名必须相同
形参列表必须不同:
形参列表中的数据结构不同
形参列表中形参个数不同
形参列表中数据类型的顺序不同
eg:
public class MethodDemo04 { public static void main (String[] args) { } public static void getSum (int a , int b) {} public static void getSum (int a , double b) {} public static int getSum (double a , int b) { return 0; } public static void getSum (double a , double b) {} public static void getSum (int a , int b , int c) {} }