- 博主简介:努力学习的预备程序媛一枚~
- 博主主页: @是瑶瑶子啦
- 所属专栏: Java岛冒险记【从小白到大佬之路】
目录
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语句)–即这个函数出栈,才能继续执行主函数。
- 正是这种先进后出的方式,和函数调用的过程完全一致:主函数调用被调函数,只有当被调函数执行完(遇到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