:Java中的方法和方法重载

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:Java中的方法和方法重载相关的知识,希望对你有一定的参考价值。

文章目录

一:Java中的方法

(1)什么是方法

方法:Java中方法就是一个代码片段,它类似于 C 语言中的 “函数”。作用有:

  • 能够模块化的组织代码
  • 做到代码被重复使用 ,一份代码可以在多个位置使用
  • 让代码更好理解更简单
  • 直接调用现有方法开发,不必重复造轮子

(2)方法定义

在Java中,定义一个方法的基本格式如下,注意

  • 修饰符:现阶段直接使用public static固定搭配即可
  • 返回值类型:如果方法有返回值,则返回值类型必须要与返回的实体的类型一致;如果没有返回值,必须写成void
  • 方法名字:采用“小驼峰”方式命名
  • 参数列表:如果方法没有参数则什么都不写;如果有参数,则需要指明参数类型,多个参数之间使用逗号隔开
  • 方法体:就是方法内部需要执行的语句,实现方法功能
  • 在Java中:方法必须写在类中、方法不能嵌套定义、没有所谓的“声明方法”
修饰符 返回值类型 方法名称([参数类型 形参1,参数类型 形参2...])
	方法体代码;
	[return 返回值];


//例子:两个整数相加
public static int add(int x, int y)
	int ret = x + y;
	return ret;

(3)方法调用

使用方法时称之为方法调用。例如下面的例子:计算1!+2!+3!+4!+5!

public class TestDemo 
    public static void main(String[] args) 
        int sum = 0;
        for(int i = 1; i <= 5; i++)
            sum += fac(i);
        
        System.out.println("1!+2!+3!+4!+5!=" + sum);
    
    //计算的n!
    public static int fac(int n)
        System.out.print("计算" + n + "!=:");
        int ret = 1;
        for(int i = 1; i <= n ; i++)
            ret*=i;
        
        System.out.println(ret);
        return ret;
    

(4)实参和形参的关系

A:实参和形参是什么

  • 实际参数(实参):调用方法时传入的参数
  • 形式参数(形参):定义方法时的参数,形参名任意

B:传值和传引用

在Java中,实参和形参分别占据不同的内存空间,方法被调用后会自动为形参开辟空间,两片空间没有任何关系,方法调用完毕形参所在空间就会被销毁。在上面的例子,实参只是把形参的值复制了一份给了形参,形参不会影响到实参

例如下面的例子中,swap方法无法实现变量交换,它仅仅交换的是形参

public class TestDemo 
    public static void main(String[] args) 
        int a = 10;
        int b = 20;
        swap(a, b);
        System.out.println("a="+a+" b="+b);
    
    public static void swap(int x, int y)
        int temp = x;
        x = y;
        y = temp;
    


对于上面的基本类型,形参是实参的拷贝,所以传参时属于 传值调用;而对于引用类型,形参从某种方面来讲就是实参,所以传参时属于 传引用调用,此时对形参的修改则会直接反馈在实参上(后面再讲)

二:方法重载

(1)概念

方法重载:Java中允许多个同名方法同时存在。满足以下要求时构成方法重载

  • 方法名称相同
  • 形参列表不同(类型、个数、顺序满足其一即可)
  • 返回值不做要求(但两个或多个方法仅仅因为返回值类型不同是不能构成重载的)

如下有三个同名方法add()构成重载,编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法

public class TestDemo 
    public static void main(String[] args) 
        int a = add(1, 2);
        double b = add(3.14, 5.27);
        double c = add(1, 1.98, 2);
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
    
    public static int add(int x, int y)
        return x + y;
    
    public static double add(double x, double y)
        return x + y;
    
    public static double add(int x, double y, int z)
        return x + y;
    


(2)实现原理

之所以可以实现这样的功能,是因为编译器在编译时会对原有方法名进行修饰,修饰规则为:方法全路径名+参数列表+返回值类型,以此构成方法完整的名字

这里,对上述字节码文件执行反汇编:javap -v TestDemo.class后可查看到如下信息

三:递归

以上是关于:Java中的方法和方法重载的主要内容,如果未能解决你的问题,请参考以下文章

java基础方法

关于Java中的方法重载

04 JVM是如何执行方法调用的(上)

Java中的方法覆盖(Overriding)和方法重载(Overloading)是啥意思?

方法调用

从jvm角度看懂类初始化方法重载重写