【初识java】方法使用介绍

【初识java】方法使用介绍,第1张

大家好我是枫晨,今天为大家介绍java中的方法,其实java中的方法就是我们c语言中介绍过的函数。
🖌️作者主页:XY枫晨
📚java专栏:java语言学习专栏

文章目录
  • 一.方法概念及使用
    • 1.1什么是方法
    • 1.2方法定义
    • 1.3方法调用
    • 1.4实参和形参的关系
  • 2.方法重载
    • 2.1方法重载的意义
    • **2.2** 方法重载概念
    • 2.3方法签名

一.方法概念及使用 1.1什么是方法

方法就是将一个可能多次重复使用的代码进行模块化处理,使得让代码更好的去理解,类似于c语言中的函数。

1.2方法定义
修饰符  返回值 方法名(形式参数){
	//方法体
}

例如:实现一个两个整数相加的方法

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

注意点:

1.修饰符:现阶段直接使用public static 固定搭配

  1. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void

  2. 方法名字:采用小驼峰命名

  3. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开

  4. 方法体:方法内部要执行的语句

  5. 在java当中,方法必须写在类当中

  6. 在java当中,方法不能嵌套定义

  7. 在java当中,没有方法声明一说

1.3方法调用

和C语言调用函数一样,方法也是同样的调用代码格式;

注意事项

定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行.

一个方法可以被多次调用.

强调三点:
1.参数个数匹配
2.参数类型匹配
3.参数顺序匹配

例:调用刚刚书写的两个整数相加的方法计算两个数字相加

public class Main {
    public static int add(int x,int y) {
    return x + y;
}
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int sum = add(a,b);
        System.out.println(sum);
    }
}
1.4实参和形参的关系

首先,形参和实参的类型是必须匹配的,不能42码的脚去穿38码的鞋子,那问题就很大了,java方法中的形参其实就相当于自变量,只是在定义方法时用来接收实参的一个变量。
在Java中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体

也就是形参和实参是互相独立的两个变量,形参之间的相互交换并不会影响到实参,例如:

public class Test{
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        swap(a,b);
        System.out.println("main"+a+" "+b);
    }
    public static void swap(int x ,int y) {
        int tmp = x;
        x = y;
        y = tmp;
        System.out.println(("swap: x = " + x + " y = " + y);
    }
}
//运行结果
swap: a=20,b=10;
main:a=10,b=20                           

不难发现,swap方法中的值进行了交换,但是main方法中的a与b的值没有交换。再次印证了形参和实参是互相独立的两个变量。

这里再提到一个概念,传值调用,对于基础类型来说,形参相当于实参临时拷贝。

刚刚的swap方法其实就是main函数中的a,b将值拷贝了一份放在swap方法中的X,y中,因此对形参X,y *** 作并不会影响实参a,b的值。

解决方法:传引用类型参数(数组法);由于java中数组还没有介绍过,这里暂时不详细讲解这段代码:

public class Swap {
public static void main(String[] args) { 
    int[] arr = {10, 20}; 
    swap(arr);
    System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}
public static void swap(int[] arr) { 
    int tmp = arr[0];
    arr[0] = arr[1];
    arr[1] = tmp;
}
}
2.方法重载 2.1方法重载的意义

再用刚刚定义个两个整数相加的方法为例,如果我用它来计算两个浮点数的相加,编译器则会出错,因为从double到int类型可能会有精度的丢失问题,那么一般都会再定义一个专门用来计算两个浮点数的方法取名为addDouble,但是如果如果要为每一种类型都专门定义一个方法还要取很多名字,冗余不说,取名都成了一个大问题。于是乎,方法重载出现了。

2.2 方法重载概念

在我们交流过程中,一个词在不同场景可能会有不同的意思,例如:”你好厉害啊“,在正常情况下应该是赞扬他人的含义,但是在一些场合,可以用于阴阳怪气别人。

在交流中,一个词语如果有多重含义,那么就说该词语被重载了,具体代表什么含义需要结合具体的场景。在Java中方法也是可以重载的。

在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。

例如:

//计算两个整形相加
public static int add(int x,int y) {
    return x + y;
}
//计算两个浮点型相加
public static double add(double x,double y) {
    return x + y;
}
//计算3个整形相加
public static int add(int x,int y,int c) {
    return x + y + c;
}
//计算2个整形和1个浮点型相加
public static double add(dint x,int y,double c) {
    return x + y + c;
}

在上面的方法中,方法名均为相同,区别在于形参的类型和个数,总结一下就是:

  1. 方法名必须相同

  2. 形式参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)

  3. 与返回值类型是否相同无关

注意:两个方法如果仅仅因为返回值不同,并不能构成方法重载

问题来了,编译器是怎么区别于不同的方法的呢?-----依靠方法签名区分

2.3方法签名

在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那为什么类中就,可以定义方法名相同的方法呢?

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

public class test {
    //计算两个整形相加
    public static int add(int x,int y) {
        return x + y;
    }
    //计算两个浮点型相加
    public static double add(double x,double y) {
        return x + y;
    }
    public static void main(String[] args) {
        int ret = add(1,2);
        double ret2 = add(2.0,3.0);
    }
}

我们利用JDK中的javap -v反汇编工具进行查看上诉代码中在编译过后的方法签名:

红框框中的内容就是两个方法的签名,第一个add:(ⅠⅠ)Ⅰ,括号内的Ⅰ代表一个Int类型,两个代表两个int类型形参,括号外的Ⅰ代表返回类型是int类型,add(DD)D同理。


方法的介绍就到这里啦,这里这是基础部分的学习,在后面的学习中会更加深入学习方法。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/794728.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存