前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >探究Java方法的神奇魔法和参数传递奥秘,有两下子!

探究Java方法的神奇魔法和参数传递奥秘,有两下子!

原创
作者头像
bug菌
发布2024-06-24 00:03:35
1590
发布2024-06-24 00:03:35
举报
文章被收录于专栏:滚雪球学Java滚雪球学Java

  咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于 **[「滚雪球学Java」 ](https://blog.csdn.net/weixin_43970743/category_9600553.html)专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅**!持续更新中,up!up!up!!

代码语言:java
复制
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

  在Java中,方法是一组执行特定任务的语句。通过方法,可以将代码分成模块,使代码更加清晰和易于维护。Java方法是在类中定义的,方法具有返回类型、名称和参数列表。

方法的定义

Java方法的基本结构如下:

代码语言:java
复制
<访问修饰符> <返回类型> <方法名>(<参数列表>) {
    // 方法体
    return <返回值>;
}

  Java方法的基本结构确实如您所描述的那样,它定义了方法的访问权限、返回类型、名称、参数列表以及方法体。下面我将详细解释每个部分:

  1. 访问修饰符 (<访问修饰符>):Java中的方法可以有多种访问级别,包括:
    • public:方法可以被任何其他类访问。
    • protected:方法可以被同一个包中的类或子类访问。
    • private:方法只能在定义它的类内部访问。
    • (无修饰符):默认访问级别,只能在同一个包中访问。
  2. 返回类型 (<返回类型>):这指定了方法执行完成后返回的数据类型。它可以是基本数据类型(如intdouble等)或对象类型(如String、自定义类名等)。如果方法不返回任何值,可以使用void作为返回类型。
  3. 方法名 (<方法名>):这是方法的标识符,应遵循Java的命名规则,通常是动词或动词短语,以描述方法的行为。
  4. 参数列表 (<参数列表>):这是方法可以接受的输入值列表。参数列表包括参数的类型和名称,多个参数之间用逗号分隔。如果方法不接受任何参数,可以省略参数列表或写为void
  5. 方法体 (// 方法体):这是方法的执行代码块,包含了方法执行的所有逻辑和操作。
  6. 返回语句 (return <返回值>;):这是可选的,用于从方法返回一个值。如果方法的返回类型不是void,则必须在方法体中包含至少一个返回语句。返回值的类型必须与方法的返回类型匹配。

以下是一个简单的Java方法示例:

代码语言:java
复制
public int add(int a, int b) {
    int sum = a + b;
    return sum; // 返回两个整数的和
}

在这个示例中:

  • 访问修饰符是public,意味着这个方法可以被任何其他类访问。
  • 返回类型是int,表示这个方法将返回一个整数。
  • 方法名是add,表示这个方法用于添加两个数。
  • 参数列表包含两个int类型的参数ab
  • 方法体计算两个数的和,并使用return语句返回结果。

  其中,访问修饰符可以是public、private或protected;返回类型可以是任何Java数据类型,或者void;方法名是由字母、数字和下划线组成的标识符;参数列表是由逗号分隔的一组参数,每个参数由类型和名称组成。

例如,下面是一个简单的Java方法,它把两个整数相加,并返回结果:

代码语言:java
复制
public int add(int num1, int num2) {
    int result = num1 + num2;
    return result;
}

方法的调用

  要使用Java方法,必须先创建一个类的实例。然后,可以使用实例名称后跟一个点号和方法名称来调用方法。例如,如果已经创建了一个名为myClass的类的实例,并且该类包含一个名为myMethod的方法,则可以使用以下语法调用该方法:

代码语言:java
复制
myClass.myMethod(<参数列表>);

例如,要使用之前定义的add()方法,可以使用以下语法:

代码语言:java
复制
int sum = add(3, 4);

  在Java中,调用方法的语法结构遵循您提供的模板。下面是对如何使用这个模板和示例的详细解释:

  1. 类名 (myClass):这是包含方法的类的名称。在Java中,每个方法都必须属于一个类。当调用一个方法时,如果方法是属于当前类的,可以省略类名直接调用;如果方法属于另一个类,需要使用类名来指定方法的来源。
  2. 方法名 (myMethod):这是要调用的方法的名称。它必须与类中定义的方法名称完全匹配。
  3. 参数列表 (<参数列表>):这是传递给方法的实际参数列表。参数列表应该与方法定义时的参数列表匹配,包括参数的类型和顺序。如果方法不接受参数,这里应该留空。
  4. 返回值变量 (int sum):这是可选的,用于存储方法返回的结果。如果方法的返回类型不是void,并且你想要使用这个方法的返回值,你需要提供一个变量来接收这个值。
  5. 赋值操作符 (=):这是将方法的返回值赋给返回值变量的操作符。
  6. 方法调用 (add(3, 4)):这是实际调用方法的语法。在这个例子中,add是方法名,34是传递给方法的参数。

示例解析:

  • int sum = add(3, 4); 这行代码做了几件事情:
    • 定义了一个名为sum的变量,用于存储返回值。
    • 调用了名为add的方法,并将两个整数34作为参数传递给它。
    • 方法执行后,假设返回两个数的和,即7,然后将这个值赋给变量sum

参数传递

Java方法参数传递基本上分为值传递和引用传递两种形式。

值传递

  值传递是指当我们将一个基本数据类型(如int、double等)作为参数传递给一个方法时,实际上传递给方法的是该值的一份拷贝。因此,在方法中对该参数进行修改不会影响原始变量。

例如,以下代码会将变量num的值从5改为10:

代码语言:java
复制
public void changeNum(int num) {
    num = 10;
}

int num = 5;
changeNum(num);
// num的值仍为5

  接着我将对上述代码进行详细的一个逐句解读,希望能够帮助到同学们,能以更快的速度对其知识点掌握学习,这也是我写此文的初衷,授人以鱼不如授人以渔,只有将其原理摸透,日后应对场景使用,才能得心应手,所以如果有基础的同学,可以略过如下代码分析步骤,然而没基础的同学,还是需要加强对代码的理解,方便你深入理解并掌握其常规使用。

  这段Java代码演示了Java中方法参数传递的一个常见误区。下面是对代码的逐步解析:

  1. 方法定义
    • public void changeNum(int num):定义了一个名为changeNum的方法,它接受一个int类型的参数num
  2. 方法实现
    • num = 10;:在changeNum方法内部,将参数num的值设置为10。这里发生了一个常见的误解:很多人可能认为这会改变传入参数的值。然而,在Java中,基本数据类型(如int)是通过值传递的,这意味着方法接收的是原始值的一个副本。
  3. 变量初始化
    • int num = 5;:在方法外部,定义了一个int类型的变量num并初始化为5。
  4. 调用方法
    • changeNum(num);:调用了changeNum方法,并将变量num作为参数传递。由于int是按值传递的,方法内部对num的修改不会影响到原始的变量。
  5. 注释说明
    • // num的值仍为5:这是一条注释,正确地指出了即使changeNum方法将参数num设置为10,原始变量num的值仍然保持为5。

代码作用

  这段代码的主要作用是演示Java中基本数据类型按值传递的行为。它说明了即使方法内部修改了参数的值,原始变量的值也不会受到影响。

引用传递

  引用传递是指当我们将一个对象作为参数传递给一个方法时,实际上传递给方法的是该对象在内存中的地址。因此,在方法中对该参数进行修改会影响原始对象。

例如,以下代码会将list中的第一个元素的值从3改为5:

代码语言:java
复制
public void changeList(List<Integer> list) {
    list.set(0, 5);
}

List<Integer> list = new ArrayList<>();
list.add(3);
changeList(list);
// list的第一个元素的值为5

  接着我将对上述代码进行详细的一个逐句解读,希望能够帮助到同学们,能以更快的速度对其知识点掌握学习,这也是我写此文的初衷,授人以鱼不如授人以渔,只有将其原理摸透,日后应对场景使用,才能得心应手,所以如果有基础的同学,可以略过如下代码分析步骤,然而没基础的同学,还是需要加强对代码的理解,方便你深入理解并掌握其常规使用。

  这段Java代码演示了如何通过方法修改一个列表(List)的第一个元素的值。下面是对代码的逐步解析:

  1. 方法定义
    • public void changeList(List<Integer> list):定义了一个名为changeList的方法,它接受一个泛型参数list,这个参数的类型是List<Integer>,意味着这个列表存储的是Integer类型的元素。
  2. 方法实现
    • list.set(0, 5);:在changeList方法内部,使用set方法来修改列表的第一个元素(索引为0的元素)。这里将第一个元素的值设置为5。
  3. 列表创建与初始化
    • List<Integer> list = new ArrayList<>();:创建了一个Integer类型的列表,并使用ArrayList的实例来初始化它。ArrayList是Java中List接口的一个具体实现,允许动态数组的特性。
  4. 添加元素
    • list.add(3);:向列表中添加了一个整数值3。此时,列表中只有一个元素,即3。
  5. 调用方法
    • changeList(list);:调用了changeList方法,并将之前创建的列表作为参数传递。由于方法内部修改了列表的第一个元素,所以调用这个方法后,列表的第一个元素的值将被修改为5。
  6. 注释说明
    • // list的第一个元素的值为5:这是一条注释,用于说明在调用changeList方法之后,列表的第一个元素的值将变为5。

代码作用

  这段代码的主要作用是演示如何在Java中通过方法调用修改列表中的元素。它展示了泛型、列表操作以及方法如何影响传入的参数。

代码改进

  • 代码中的注释是正确的,但是通常我们不会在代码中直接写出预期的结果,而是通过编写测试用例或断言来验证代码的正确性。
  • 代码示例没有包含错误处理,例如,如果列表为空,调用set(0, 5)将抛出IndexOutOfBoundsException异常。

小结

  这段代码是一个很好的示例,展示了如何在Java中使用泛型和列表操作。它说明了方法如何接收一个列表作为参数,并修改列表中的元素。这种技术在处理集合数据时非常有用,尤其是在需要在方法内部修改集合状态的情况下。

方法重载

  方法重载是指在同一个类中定义多个方法,这些方法具有相同的名称但参数列表不同。当代码调用具有重载名称的方法时,编译器根据传递的参数类型和数量选择正确的方法。

例如,以下示例定义了两个名为add()的方法,一个接受两个整数作为参数,另一个接受两个双精度浮点数作为参数:

代码语言:java
复制
public int add(int num1, int num2) {
    int result = num1 + num2;
    return result;
}

public double add(double num1, double num2) {
    double result = num1 + num2;
    return result;
}

int sum1 = add(3, 4);
double sum2 = add(2.5, 3.0);

  接着我将对上述代码进行详细的一个逐句解读,希望能够帮助到同学们,能以更快的速度对其知识点掌握学习,这也是我写此文的初衷,授人以鱼不如授人以渔,只有将其原理摸透,日后应对场景使用,才能得心应手,所以如果有基础的同学,可以略过如下代码分析步骤,然而没基础的同学,还是需要加强对代码的理解,方便你深入理解并掌握其常规使用。

  这段Java代码定义了一个简单的类,其中包含了两个重载的add方法,以及两个变量sum1sum2用于存储调用add方法后的结果。

代码解析

  1. 类定义:Java代码通常位于一个类中,这个类可以包含方法、变量等。在这段代码中,没有显示类的定义,但我们可以假设它是一个公共类,因为Java的主方法main没有给出。
  2. 方法重载add方法被重载了两次。第一次接受两个int类型的参数,第二次接受两个double类型的参数。Java允许同一个类中有多个同名方法,只要它们的参数列表不同(参数的类型或数量不同)。
  3. 方法实现
    • public int add(int num1, int num2):这个方法接受两个整数参数num1num2,将它们相加,并将结果存储在int类型的变量result中,然后返回这个结果。
    • public double add(double num1, double num2):这个方法接受两个双精度浮点数参数num1num2,将它们相加,并将结果存储在double类型的变量result中,然后返回这个结果。
  4. 变量定义与赋值
    • int sum1 = add(3, 4);:这里调用了第一个add方法,传入两个整数3和4,并将返回的结果赋值给int类型的变量sum1。由于add方法返回int类型,所以sum1的值将是7。
    • double sum2 = add(2.5, 3.0);:这里调用了第二个add方法,传入两个双精度浮点数2.5和3.0,并将返回的结果赋值给double类型的变量sum2。由于add方法返回double类型,所以sum2的值将是5.5。

代码作用

  这段代码的主要作用是演示Java中方法重载的概念。它展示了如何使用相同的名字定义多个方法,只要它们的参数不同。这允许开发者根据需要选择正确的方法版本来执行。

代码改进

  • 代码中没有包含main方法,这是Java程序的入口点。通常,我们会在类中添加一个main方法来测试其他方法。
  • 代码中没有错误处理或边界检查,例如,如果add方法用于非常大的数字,可能会发生溢出。
  • 代码可以进一步封装,例如,将result变量的声明和初始化放在方法的返回语句中,以减少代码量。

小结

  这段代码是一个很好的Java方法重载示例,展示了如何根据不同的参数类型调用同一个方法名的不同实现。通过这种方式,Java代码可以更加灵活和可重用。

总结

  Java方法是一组执行特定任务的语句,可以将代码分成模块,使代码更加清晰和易于维护。Java方法可以具有返回类型、名称和参数列表。方法的调用基于类的实例,并使用实例名称后跟一个点号和方法名称的语法。Java方法参数传递基本上分为值传递和引用传递两种形式。方法重载是指在同一个类中定义多个方法,这些方法具有相同的名称但参数列表不同。

☀️建议/推荐你

  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

  码字不易,如果这篇文章对你有所帮助,帮忙给bugj菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。   同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

  我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金等平台签约作者,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计30w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


--End

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 方法的定义
  • 方法的调用
    • 示例解析:
    • 参数传递
      • 值传递
        • 代码作用
          • 引用传递
            • 代码作用
              • 代码改进
                • 小结
                • 方法重载
                  • 代码解析
                    • 代码作用
                      • 代码改进
                        • 小结
                        • 总结
                        • ☀️建议/推荐你
                        • 📣关于我
                        相关产品与服务
                        腾讯云代码分析
                        腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档