面向对象方法通俗解释(什么是面向对象中的方法,方法和函数不一样)

100次浏览     发布时间:2024-10-30 10:04:38    

“这里是offer学院,帮你轻松拿offer”

嗨~大家好,我是学长

今天的你过得还好吗?

- 2022.12.09 -



一、什么是方法

概念:

其实在前⾯我们已经接触到了方法的概念,Java程序的入口main()就是⼀个方法。而System. out.println();语句中println()也是⼀个方法。

我们可以将⽅法理解为⼀个命名语句块,通过其名称 + 括号运算符()可以调⽤。

我们可以将需要重复编写的代码,封装到⼀个方法中,做到“随时任意使用”。提高代码的复用性。使用代码的时候,直接找到名字调用即可。

举例:

//外部的类
public class Caculate{
 /**
 *被调⽤的⽅法Add
 *@param x
 *@param y
 *@return
 */
 public int Add(int x,int y){
 return x+y;
 }
}
//调⽤
public class Demo {
 public static void main(String[] args) {
 int a=5;
 int b=a+1;
 int result=0;
 //Add⽅法调⽤:第⼀步,类的实例化
 Caculate test=new Caculate(); 
 //第⼆步,通过实例化的类进⾏Add⽅法调⽤
 result=test.Add(a, b); 
 }
}


二、如何定义方法

在Java中,定义⼀个⽅法的语法为:

访问修饰符 返回类型 ⽅法名(参数列表) {
 若⼲语句;
 return ⽅法返回值;
}

  • 访问修饰符有4种情况:publicprivateprotected,也可以省略(default)。由于涉及到后⾯ 的⾯向对象相关知识,本节统⼀使⽤ public修饰⽅法;
  • 返回类型:可以是任何的数据类型或 void ,如果⽅法没有返回值,返回类型设置为void
  • 方法名:⽅法名的命名规范和变量相同;
  • 参数列表:参数是变量的⼀种类型,参数变量的作⽤域在⽅法内部;
  • 方法体:⽅法内部的⼀些语句。当⽅法返回值为 void 时,可以省略return 语句。
public int Add(int x,int y){
 return x+y;
 }


三、分类

根据⽅法是否带有参数、是否有返回值,可以分为 4 类:

  • 无参⽆返回值⽅法
  • 无参带返回值⽅法
  • 带参数⽆返回值⽅法
  • 带参数带返回值⽅法


3.1、无参无返回值方法:

⽆参⽆返回值⽅法,即参数列表为空,返回值为void 的⽅法。

例如,我们经常需要输出⼀段内容。可以将输出语句封装到⽅法中:

class MethodDemo1 {
 // 定义⽆参⽆返回值⽅法
 public void printText() {
 // 三条输出语句
 System.out.println("Java");
 }
}


上⾯代码,在类MethodDemo1中定义了⼀个⽅法printText,其中有⼀些打印语句。那么如何调⽤这 个⽅法,让其执⾏呢?

对于非静态⽅法(即⾮static关键字修饰的⽅法),⾸先要使⽤new关键字实例化类,⽣成⼀个对 象,再通过对象名.⽅法名()的⽅式去调动⽅法。

如下是 MethodDemo1 类⽅法调⽤的实例:

class MethodDemo1 {
 // 定义⽆参⽆返回值⽅法
   public void printText() {
       //
       System.out.println("Java语⾔");
   }
 
   public static void main(String[] args) {
       // 实例化MethodDemo1类
       MethodDemo1 methodDemo1 = new MethodDemo1();
       // 调⽤printText⽅法
       methodDemo1.printText();
    }
}

Tips:由于我们还没有学习⾯向对象,此处对于对象的实例化,先记住这种固定写法即可。本节的学习重点在于如何定义⽅法和调⽤⽅法。


3.2、无参带返回值方法:

⽆参带返回值⽅法,即参数列表为空,返回值不为void的⽅法,⽅法体内部要使⽤return语句返回 其声明的返回类型。

我们来⾃定义⼀个返回Hello World!字符串的⽅法:

class MethodDemo2 {
 // 定义⽆参带返回值⽅法
 public String getHelloStr() {
 // 初始化变量str
 String str = "Hello World";
 // 返回str
 return str;
 }
 
 public static void main(String[] args) {
 // 实例化MethodDemo2
 MethodDemo2 methodDemo2 = new MethodDemo2();
 // 调⽤getStr⽅法,并且使⽤result变量接收返回值
 String result = methodDemo2.getHelloStr();
 // 打印返回值
 System.out.println(result);
 }
}

3.3、带参数无返回值方法:

带参数⽆返回值⽅法,即带有参数列表,返回值为void的⽅法。

参数列表可能有⼀个或多个参数,多个参数使⽤逗号(,)隔开。定义⽅式为:DataType 参数名1,DataType 参数名2,DateType 为参数的类型。

下面是⼀个根据长和宽求长方形面积的方法实例:

class MethodDemo3 {
 // 定义带参数⽆返回值⽅法
 public void printArea(float a, float b) { // 此处的 a,b 为参数变量
float result = a * b;
 System.out.println( "⻓⽅形⾯积为:" + result);
 }
 
 public static void main(String[] args) {
 // 实例化MethodDemo3
 MethodDemo3 methodDemo3 = new MethodDemo3();
 // 初始化两个变量
 float width = 12.3f;
 float height = 20f;
 // 调⽤printArea⽅法,并将 width、height变量作为参数传⼊
 methodDemo3.printArea(width, height);
 // 也可不提前初始化变量,直接传⼊浮点型字⾯量作为参数。
 methodDemo3.printArea(10.2f, 2.5f);
 }
}

在调⽤带参数⽅法时,有两种传参⽅式:

  • 1、先初始化变量,再将变量传递给⽅法:
float a = 12.3f;
float b = 20f;
methodDemo3.printArea(a, b);

  • 2、直接传⼊对应类型字⾯量:
methodDemo3.printArea(10.2f, 2.5f);

当调⽤⽅把参数传递给⽅法时,调⽤时传递的值会按参数位置⼀⼀绑定,这也比较符合我们正常的思维逻辑。因此,对于有多个参数的方法,⼀定要注意每个参数的位置。


3.4、带参数带返回值方法:

带参带返回值方法,即带有参数列表,返回值不为void的⽅法。

下面我们来看一个实例,求从1到n的平方和:

class MethodDemo4 {
 // 定义带参数带返回值⽅法
 public int getSumOfSquares(int n) {
 int sum = 0;
 for (int i = 1; i <=n; i++) {
 // 求i的平⽅,并加和赋值给sum
 sum += i * i;
 }
 // 返回计算结果
 return sum;
 }
 public static void main(String[] args) {
 // 实例化MethodDemo4
 MethodDemo4 methodDemo4 = new MethodDemo4();
 // 调⽤对象下getSumOfSquares⽅法,并⽤sumOfSquares变量接收返回结果
 int sumOfSquares = methodDemo4.getSumOfSquares(5);
 System.out.println("1到5的累加平⽅和为:" + sumOfSquares);
 }
}


我们也可以不定义变量接收返回结果,直接打印⽅法调⽤语句:

System.out.println("1到5的累加平⽅和为:" + methodDemo4.getSumOfSquares(5));

上⾯有参⽅法的例⼦,参数都是简单的基本数据类型,当参数为数组时,我们再来看⼀个实例:

class MethodDemo5 {
 /**
 * 查找数组中元素是否包含指定元素
 * @param arr 待查找数组
 * @param element 所查找的元素
 * @return boolean 查找结果,true包含; false不包含
 */
 public boolean contains(int[] arr, int element) {
 // 定义返回结果,默认为false,即未找到element元素
 boolean result = false;
 for (int value : arr) {
 if (value == element) {
 // 找到了element元素,将变量更新为true,并跳出循环
 result = true;
 break;
 }
 }
 // 返回计算结果
 return result;
 }
 public static void main(String[] args) {
 // 实例化MethodDemo5
 MethodDemo5 methodDemo5 = new MethodDemo5();
 // 初始化⼀个数组
 int[] intArray = {1, 3, 5, 6, 7, 9};
 // 初始化待查找元素变量
 int element = 10;
 // 调⽤contains⽅法,并接收返回结果
 boolean contains = methodDemo5.contains(intArray, element);
 // 根据返回结果,输出内容
 if (contains) {
 System.out.println("数组intArray中包含元素" + element);
 } else {
 System.out.println("数组intArray中不包含元素" + element);
 }
 }
}


代码解析:

上述代码定义了⼀个查找数组中是否包含指定元素的方法,它将数组和指定元素作为⽅法参数,并 且返回了⼀个布尔型的结果,⽅法体内部⾸先声明了⼀个待返回的布尔变量,默认为false,然后对数组参数进⾏迭代,只要找到与元素参数相同的元素,即更新返回变量为true,跳出循环;如果数 组迭代完成后依旧未找到指定的元素,那么待返回变量依然是false,最后返回这个变量。在⽅法调 ⽤时,以⼀个布尔变量来接收结果,后续代码根据这个布尔变量做了逻辑判断,以执⾏不同的语句块。



四、方法传值

调⽤⽅和⽅法之间有参数的传递时,要注意⽅法传值问题。


4.1、基本类型的传值:

基本类型参数的传递,是调⽤⽅值的复制。双⽅各⾃的后续修改,互不影响。简单来讲,方法内部 对参数变量的任何操作,都不会影响到方法外部的变量。

我们看⼀个实例:

class Car {
 public void speedUp(int speed) {
 System.out.println("⼩汽⻋加速前,速度为:" + speed);
 speed ++;
 System.out.println("⼩汽⻋加速后,速度为:" + speed);
 }
 public static void main(String[] args) {
 // 定义⼩汽⻋初始速度变量
 int speed = 10;
 // 实例化Car类,创建⼀个car对象
 Car car = new Car();
 // 调⽤car对象下的speed⽅法
 car.speedUp(speed);
 // 打印调⽤⽅法后速度参数的值
 System.out.println("调⽤speedUp⽅法后,调⽤⽅的speed参数为:" + speed);
 }
}


我们根据输出的结果验证了以上给出的结论。整型参数speed是⼀个基本数据类型,在speedUp⽅ 法内部进⾏了⾃增,但主⽅法中的speed变量的值并不会受到其影响。


4.2、引⽤类型的传值:

引⽤类型参数的传递,调⽤⽅的变量,和接收⽅的参数变量,地址指向的是同⼀个对象。双⽅任意 ⼀⽅对这个对象的修改,都会影响对⽅。

我们来看⼀个实例:

class NBATeam {
// 替换第⼀个球员⽅法
 public void replaceFirstPlayer(String[] players, String playerName) {
 // 替换第⼀个球员
 System.out.println("将第⼀个球员替换:");
 players[0] = playerName;
 }
 public static void main(String[] args) {
 String[] players = {"詹姆斯", "科⽐", "杜兰特", "乔丹"};
 System.out.println("球队中现有球员:");
 for (String player : players) {
 System.out.print(player + "\t");
 }
 System.out.println();
 
 // 创建team对象并调⽤其替换球员⽅法
 NBATeam team = new NBATeam();
 team.replaceFirstPlayer(players, "⽪蓬");
 System.out.println("替换后球员:");
 for (String player : players) {
 System.out.print(player + "\t");
 }
 }
}


由运行结果可见:方法replaceFirstPlayer的参数players是数组类型,也就是引用类型。当我们在方法内部对players进行操作,其方法外部(即主方法中)的players变量也受到了影响。


不只是数组, 对象也是引⽤类型,其参数传递同样遵循以上结论。我们在⽇常的编码中,请注意区分基本类型和 引⽤类型的⽅法传值区别。


五、方法与函数

一句话告诉你如何区分函数与方法:

函数是大家的函数,方法是类的方法。

这两者的不同,只是在使⽤场景上的不同,同⼀个东西,用对象调用的叫方法,直接调函数名的叫函数。

⾯向对象编程,函数写到类里边就叫做方法,函数可以直接调用,对象中的方法⼀般都有指针 this 指向它。

面向对象的语言叫方法

面向过程的语言叫函数

⽽我们的理解就是方法偏重于类,也就是面向对象设计的,注重每个函数的功能所以叫方法;而函数偏重于面向过程,有可能是功能描述也有能不是。仅此⽽已。

还是那句话:我亦无他,唯手熟尔!


相关文章
喜德瑞壁挂炉售后服务号码及其服务网点介绍实时反馈-今-日-汇-总

喜德瑞壁挂炉售后服务号码及其服务网点介绍实时反馈-今-日-汇-总

喜德瑞壁挂炉的售后维修电话是:400-883-2086。喜德瑞壁挂炉作为智能家居市场的佼佼者,以其先进的技术和优质的产品赢得了广大消费者的青睐。再优质的产品也难免会在使用过程中出现一些问题,因此售后服务的质量就显得尤为重要。为了保障用户的使用体验,喜德瑞壁挂炉提供了专业的售后维修服务,其中一个重要的

2025-04-29 07:54:27

顾家(Gujia)燃气热水器售后号码-全国400服务号码实时反馈-今-日-资-讯

顾家(Gujia)燃气热水器售后号码-全国400服务号码实时反馈-今-日-资-讯

如电器使用过程中出现问题给您带来不便,我们深表歉意,麻烦您拨打公司客服热线(400-883-2086),我们将安排工作人员为您提供上门维修服务,感谢您的来电! 服务区域;全市各区及周边等辖区均有维修网点,统一报修,就近安排维修上门服务一、能工巧匠:为您提供优质服务《工程师背景

2025-04-29 07:53:30

布德鲁兹热水器用户售后客服中心实时反馈-今-日-更-新

布德鲁兹热水器用户售后客服中心实时反馈-今-日-更-新

布德鲁兹热水器全国售后客服电话为400-883-2086,该电话开通时间为每周一至周五08:00-24:00,周六、周日08:00-23:00。此电话是提供给布德鲁兹热水器用户的专业客服电话,主要是为了解决用户使用布德鲁兹热水器的遇到的问题和故障。用户遇到问题时,可以通过拨打该号码,

2025-04-29 07:53:17

惠氏指纹锁各24小时售后全国客服受理中心实时反馈-今-日-汇-总

惠氏指纹锁各24小时售后全国客服受理中心实时反馈-今-日-汇-总

惠氏指纹锁24小时售后客服中心:400-883-2086惠氏指纹锁,作为一家资深且信誉卓著的服务提供商,自成立以来便专注于为各界客户提供安全可靠的产品质量与维护解决方案。我们不仅拥有完备的工商注册资质,并且每一项服务均经过相关单位严格备案,确保每一次上门服务既专业又合法,给予客户十足的安全感

2025-04-29 07:52:37

沛森(PEISEN)集成灶售后24小时联系方式维修查询实时反馈全+境+到+达

沛森(PEISEN)集成灶售后24小时联系方式维修查询实时反馈全+境+到+达

沛森(PEISEN)集成灶全国统一售后服务热线电话24小时 400-883-2086沛森(PEISEN)集成灶作为一家知名的品牌,一直致力于为用户提供优质的产品和完善的售后服务。为了更好地为广大用户解决产品使用过程中的问题和困扰,我们特别设立了全国统一服务热线电话,并且24小时为您提

2025-04-29 07:48:59

双佳燃气灶服务24小时热线-各区售后统一服务实时反馈-今-日-汇-总

双佳燃气灶服务24小时热线-各区售后统一服务实时反馈-今-日-汇-总

双佳燃气灶售后服务电话:400-883-2086双佳燃气灶24小时客服热线:400-883-2086双佳燃气灶24小时人工客服、线下专业全国网点及各地区 专业人员服务团队等专属服务,整个报修流程规范有序,后期同步跟踪查询公开透明。所有专业团队均经过专业培训、持证上岗,所用配件均为

2025-04-29 07:47:20

美俸壁挂炉全国各市24小时售后服务点热线号码实时反馈全+境+到+达

美俸壁挂炉全国各市24小时售后服务点热线号码实时反馈全+境+到+达

美俸壁挂炉:400-883-2086,一键呼叫,服务到家——让您的美俸壁挂炉明心之所向,践专注之行。我们深知您的美俸壁挂炉电器对您意义非凡,因此我们提供全方位的,让您的美俸壁挂炉在使用中随时享受如家的呵护:美俸壁挂炉 售后,您专属的美俸壁挂炉 服务团队,全天候技术支持,为您打造简单高效的售后

2025-04-29 07:46:18

弗兰卡燃气灶服务24小时热线-各区售后统一服务实时反馈-今-日-资-讯

弗兰卡燃气灶服务24小时热线-各区售后统一服务实时反馈-今-日-资-讯

弗兰卡燃气灶作为家用设备的领先品牌,始终致力于为用户提供高品质的产品和专业的售后服务。无论您遇到任何问题,都可以拨打弗兰卡燃气灶售后服务电话:400-883-2086,我们的专业团队将为您提供及时、高效的解决方案。弗兰卡燃气灶服务24小时热线-各区售后统一服务实时反馈-今-日-资-讯日常使用

2025-04-29 07:43:26