【Java】保姆级讲解|从0到1学会方法及方法重载 ( 入门,包懂)

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 【Java】保姆级讲解|从0到1学会方法及方法重载 ( 入门,包懂),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在这里插入图片描述

在这里插入图片描述

Part1:Java中的方法

1.1什么是Java中的方法?

💁‍♀️方法,其实就是功能,再简单来说,就是一块可以被重复利用的代码块!相当于C语言中的函数。

  • 方法存在的意义:
    1:模块化组织代码
    2:提高代码的复用性,简洁性(调用现有method开发,不必重复造轮子)
    3:提高代码的可阅读性

1.2Java中方法的定义方式:

修饰限定符   返回值类型 函数名(参数列表){
	功能实现
}
//eg:
public static int add (int x,int y){
	return x+y;
}

1.3方法使用的注意事项:

  • 传参时,实参和形参的类型一定要匹配.
  • Java中没有所谓先声明,后定义(定义就是声明)。即,被调用方法也可在调用方法之后存在。
  • 方法的定义必须在类之中

1.4函数是如何开辟内存的?

  • 什么是栈.
  • 这里的栈,指的是是计算机内存中的一块存储区域–栈区.
  • 栈的特点?:–先进后出
    • 正是这种先进后出的方式,和函数调用的过程完全一致:主函数调用被调函数,只有当被调函数执行完(遇到return语句)–即这个函数出栈,才能继续执行主函数。
      在这里插入图片描述
  • 🔥注意!!!:在Java当中取不到栈上所存变量的地址,也就是说,想通过取栈上变量地址,来进行地址传参从而修改局部变量的值,是做不到的。

Part2:方法的重载(overload):

2.1什么是重载:

oracle官网上,JDK8标准手册手册是这样说的:If two methods of a class (whether both declared in the same class, or both inherited by a class, or one declared and one inherited) have the same name but signatures that are not override-equivalent, then the method name is said to be overloaded.
如果两个方法(无论这个两个方法是在同一个类中声明,或者这两个方法都被一个子类继承,或者一个方法在父类中声明,另外一个方法在子类中声明)具有同一个名字,但是签名不是重写等价的(一样的),那么这个方法的名字可以说

👩‍🏫因为还没有讲到类和对象,可以简单理解为:

  • 同”一个方法”(方法名相同的,我们抽象起来认为是一个方法),但是有不同版本的实现,这就叫做方法的重载or重写 。(方法名只有1个,但方法有多个,具体的每一个方法都是不同的)

🤷‍♀️如何理解:
这里的”方法相同“,在语言上体现,就是函数名相同,比如,计算2个小数的和,这是加法;计算2个长整型的和,也是加法。那么我们只需要写一个方法add,然后通过去改变返回值(只改变返回值,不是重写)和参数列表还有具体实现方法实现的代码,来重载这个方法,即让看似好像在用add这1个方法,实际上它有不同的版本(add的重写)–比如:既可以做整数相加,又可做小数相加。
(但是调用方法时,编译器不是根据函数名来调用函数的,而是根据函数签名!这个我们稍后讲)
🤽‍♀️具体例子:

 //计算2个int类型数据相加
    public static int add(int a,int b){
        return a+b;
    }
    //计算2个double类型数据相加
    public static double add(double a,double b){
        return a+b;
    }
    //计算3个int类型数据相加
    public static int add(int a,int b,int c){
        return a+b+c;
    }
    public static void main(String[] args) {
        System.out.println(add(1,2,3));
    }

🔔注意:一些博文里说“重载是同一个类中的…”这种方法是错误的,也可以在两个不同类中!

class Point {
    int x = 0, y = 0;
    void move(int dx, int dy) { x += dx; y += dy; }
    int color;
}
class RealPoint extends Point {
    float x = 0.0f, y = 0.0f;
    void move(int dx, int dy) { move((float)dx, (float)dy); }
    void move(float dx, float dy) { x += dx; y += dy; }
}

“Here, the class RealPoint hides the declarations of the int instance variables x and y of class Point with its own float instance variables x and y, and overrides the method move of class Point with its own move method. It also overloads the name move with another method with a different signature”
简而言之就是说RealPoint类继承了Point类(并重写了Point类中move方法),RealPoint类中的的move方法就是重载的Point类中的move方法,而这两个方法可以看到并不在一个类中。所以:方法之间的重载,可以发生在两个类中(只要两个类是继承关系即可)

2.2什么是方法的签名(method signature)

  • 首先,编译器是根据方法的签名,来判断方法是否相同。即方法签名是用来区分不同方法的标识符.它包括两部分:(不包括修饰符和返回值!!!)
    1:方法名
    2:参数列表
  • 当我们调用一个方法时,如果已存在多个同名方法,Java会根据所传参数的类型,和个数(即参数列表),去自动匹配到方法签名符合的那个方法去调用。

2.3重载的规则:

  • 方法名相同
  • 方法的参数列表不同(参数个数&参数类型)
  • 方法返回值的类型是否相同,并不影响函数的重载

这两个方法的签名是一样的,所以不是函数的重载!

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

🏄‍♀️下期预告–超详细讲解Java中的数组
🙆‍♀️专栏系列文章:

原创不易,如果对你有所帮助,还请三连+关注!我是瑶瑶子,持续输出优质文章!

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142461.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!