Java 方法的使用

本文详细介绍了Java中的方法,包括方法的概念、定义、调用、重载及其签名。方法作为代码模块,实现了代码的复用和模块化。Java中的方法调用遵循传值原则,不存在C语言中的传址调用。方法重载允许同一方法名但参数列表不同的方法存在,提高了代码的灵活性。此外,文章还提到了方法的递归使用,将复杂问题分解为更小的部分。
摘要由CSDN通过智能技术生成

    简单来说,Java当中的方法,类似于C语言当中函数。比如主方法main方法,在C语言当中,就是main函数,所有的程序都是由main方法开始,由main方法结束。下面,对Java当中的方法进行一个简单的回顾。

一、方法的概念和使用

1、什么是方法

方法就是一个代码块(片段),类似于C语言当中的函数。我们知道,在C语言当中,函数的存在使得代码模块化,大大提高了代码的效率。在Java中,方法也有着同样的作用:

(1)使代码能够重复使用。

(2)使代码模块化。

(3)直接调用现有的方法,比如Java封装好的方法,避免重复造轮子。

2、方法的定义

和C语言函数类似,方法的格式如下:

// 方法定义

修饰符 返回值类型 方法名称([参数类型 形参 ...]) {

      方法体代码;

      [return 返回值];

}

    这里要说明的是修饰符。由于Java是面向对象的语言,在写代码的时候,方法的实现者希望方法的调用者不能修改他写的方法,就要通过限定修饰符private来进行封装,这就是是一种修饰符。 类似的还有public等等。

现在,我们写一个方法,来实现两个数的加法:

public static int add(int x, int y) {
    return x + y;
}

public static void main(String[] args) {
    int a = 10;
    int b = 10;
    System.out.println(add(a, b));
}

    这里的修饰符是public和static,是public权限,说明这个方法可以被任意的方法来调用。而且可以被方法的调用者来修改。当然可以不加。static说明这个方法是静态的方法,因为main方法是静态的,要调用的方法也只能是静态的:

具体的原因要到类和对象来说明。这里建议加上public和static。

注意事项:

(1)方法的返回值类型:如果有,返回值类型要和返回的实体类型一致,否者写成void。

(2)方法的名称:应当使用小驼峰命名。

(3)方法的参数列表:如果没有,什么都不写,否者需要指定参数类型,多个参数使用“,”来隔开。

(4)方法体:要实现功能的代码块。

(5)方法要写在类的里面。上面的add方法是写在一个public主类里面的。

(6)方法不存在声明,也不能嵌套定义。

3、方法的调用

    在main函数中调用方法,将参数传进去,然后,内存就会去寻找方法的地址,找到后,执行被调用方法的方法体,被调用方法结束后,返回结果,回到主调方法继续执行。一个方法,可以被多次调用。在定义方法的时候,是不会执行方法的代码,只有在调用的时候才执行。

说到这里,就要说明实参和形参。

形参是实参的一份临时拷贝。形参和实参是两个不同的实体,改变形参对实参没有影响。比如:

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

结果是显然的。

    实参a和b是main方法中的两个变量,其空间在main方法的栈(一块特殊的内存空间,Java是拿不到这块内存的,C语言只需要&就可以了)中,而形参x和y是swap方法中的两个变量,x和y的空间在swap方法运行时的栈中,因此:实参a和b与形参x和y是两个没有任何关联性的变量,在swap方法调用时,只是将实参a和b中的值拷贝了一份传递给了形参x和y,因此对形参x和y操作不会对实参a和b产生任何影响。

    在C语言当中,想要改变实参的值,就要用到指针,而Java没有指针的概念。要进行交换,可以使用数组,类和对象来实现。也就是说,在Java中,所有的调用都是传值调用,不存在传址调用,地址也是一个值。

要实现的话,使用数组来实现:

二、方法的重载

1、为什么需要方法的重载

    比如实现两个数的相加的方法。在参数列表里面写了两个int,我们传的时候,只能传int的参数。现在想要实现double的相加,那就在写一个新的方法,提供新的方法名,但是取名字本来就是很让人头疼。而方法的重载可以让我们旧瓶装新酒。

 2、方法重载的概念

    在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。比如官方的几个方法重载,以Arrays.copyOf(数组的拷贝)举例:

 在这里,对copyOf方法进行了重载,以至于可以拷贝整型的,字符型的等等。

3、方法重载的要点

(1)方法名一定要相同

(2)参数列表要不同,比如参数列表的参数顺序,参数个数,参数类型。参数名不影响。

(3)返回值不做要求 

    编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法。那么上面的方法名称都一样,为什么重载后就不报错呢,这涉及到方法的签名,了解即可。

3、方法的签名

    方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。

要了解方法的签名,就要用到Java汇编工具。汇编后,得到如下信息:

add:(DD)D,括号两个D说明double,外面的D说明是返回类型是double,前面的test等是方法的路径。

三、方法的递归

Java中方法的递归和C语言当中函数的递归是一样的,都是把一个大的问题转化成小的问题。这里参考本人的一篇实例。

使用递归实现n^k C语言_Naion的博客-CSDN博客icon-default.png?t=M276https://blog.csdn.net/Naion/article/details/120406988?spm=1001.2014.3001.5501递归相对于循环,优点在于:代码少、逻辑好,但是理解比较难,浪费的空间多。有些题,天生适合递归,比如二叉树问题。递归需要多多的练习。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值