【初识java】方法概念介绍
大家好我是枫晨,今天为大家介绍java中的方法,其实java中的方法就是我们c语言中介绍过的函数。
一.方法概念及使用
1.1什么是方法
方法就是将一个可能多次重复使用的代码进行模块化处理,使得让代码更好的去理解,类似于c语言中的函数。
1.2方法定义
修饰符 返回值 方法名(形式参数){
//方法体
}
例如:实现一个两个整数相加的方法
public static int add(int x,int y) {
return x + y;
}
注意点:
1.修饰符:现阶段直接使用public static 固定搭配
返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void
方法名字:采用小驼峰命名
参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
方法体:方法内部要执行的语句
在java当中,方法必须写在类当中
在java当中,方法不能嵌套定义
在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;
}
在上面的方法中,方法名均为相同,区别在于形参的类型和个数,总结一下就是:
方法名必须相同
形式参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
与返回值类型是否相同无关
注意:两个方法如果仅仅因为返回值不同,并不能构成方法重载
问题来了,编译器是怎么区别于不同的方法的呢?-----依靠方法签名区分
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同理。
java的方法使用介绍就到这里啦,内容虽然不是很多,但是细节却是满满!