目录
什么是方法
在说方法是什么之前,我先给各位小伙伴讲一个故事(我瞎编的),听完了这个故事,相信小伙伴们就会对方法有个初步的了解。
“在文字刚诞生的时候,有个偏远小国,那里还没有文字的传入。在小国里有个先知,他每天的任务就是预测天气,然后将天气情况告诉给每个前来问的人,每天来问天气的人很多,比一个byte的范围还要多。先知就觉得很麻烦,有没有什么办法能一劳永逸呢?”
“等到文字传入小国后,先知将天气情况写在了纸上(定义方法),每个来问天气的人只需要自己去看纸上的内容就好(调用方法) ”
方法,正如其名,是”解决某种问题的方法“或者是”具有某种功能“的一段代码,而我们的项目就是这样的一段段代码构成的。当某个功能需要被重复使用到的时候,我们就可以将实现这个功能的代码封装成方法,需要时直接调用即可(调用就是使用)
在上面的故事中,因为每天来问的人很多,所以先知将天气情况写在纸上,这个就相当于我们定义方法的过程,而人们看纸上内容就相当于调用方法的过程。
方法的定义
方法的定义,换句话说就是方法的实现。在上面故事中,方法的实现是将天气情况写在纸上。在Java中,定义方法时要考虑以下几点:
方法返回值:调用这个方法希望得到什么样的反馈(看纸上内容就得知天气,天气情况就是返回值)。当不需要返回值时,直接返回void(空类型)。
方法名:方法的名称。方法的命名时需要遵守“小驼峰”规则,而且在命名时,最好用功能的英文来命名。
方法参数:调用这个方法时传入的数据。如果方法没参数,则什么都不写,如果有参数,则需要写清楚参数的类型。
方法体:具体方法的实现(也就是先知写在纸上的内容)
//定义方法的格式
public static 返回值 方法名(参数列表) {
方法的实现
}
//实例
public static int add(int a,int b) {
int c = a + b;
return c;
}
方法的调用
方法的调用换句话说就是使用这个方法,在上面的故事中,人们看纸上的内容就相当于调用了方法。在调用方法时,传入方法的参数的类型,个数,顺序都需要一一匹配。
//调用格式
方法名(参数列表);
//实例
public static void main(String args[]){
int a = 10;
int b = 20;
int sum = add(a,b);
}
形参和实参的区别
形参:全名形式参数,是方法被调用时用于接收实参值的变量。
不知道大家有没有过这样的经历,在创文活动时,每当领导要来巡查时,整个学校的学生都要“自愿”劳动,打扫卫生。而在平时,这样的打扫卫生活动是没有的。形式参数就和上面的打扫卫生活动一样,只有被调用时,它才会被实例化(被创建出来),否则,在没人调用它时,它就只是一段代码而已。
如果看完了上面的例子,还不理解什么是形参的小伙伴,可以再看下面的例子。形参就相当于一个仓库的建筑图纸,在方法被调用时图纸上的仓库就会被建造起来,用来存储东西。如果方法没有被调用,它就只会是一张图纸,不会占据空间。
实参:实际参数。在调用方法时传递给方法的值。
public static void main(String args[]){
int a = 10;
int b = 20;
int ret = add(a,b);
//传入add方法的参数a,b就是实际参数
}
//此处的x和y就是add方法的形式参数
public static int add(int x,int y){
int z = x + y;
return z;
}
形参和实参的关系:形参是实参的一份临时拷贝(复制),对形参的修改不会改变实参。(敲黑板,划重点)
在调用方法时,实参和实参各自在内存中有自己的存储空间,而实参会把自身的值传递给对应的形参。在上面的代码中,实参a将自身的值传递给形参x。因此可以将形参看成是形参的一份临时拷贝
在修改形参时,改变的是实参复制品的值,对实参本身没有影响
方法重载
方法重载:方法名相同,参数列表不同,即可构成方法重载。在编程中,有时候我们需要实现一些功能类似,但是参数列表不一样的方法时,这个时候就可以使用方法重载。
比如:计算两个整数的和计算两个浮点数(小数)的和,这两个方法需要实现的功能都是计算和,但是所需要的参数列表不一样而已。
构成重载的条件:参数名相同,参数个数不同,参数类型不同,不同类型的参数顺序不同(后面三个只需要满足其一即可)
注意:返回值不同不构成重载
public static int add(int a,int b,int c){
int z = a + b + c;
return z;
}
public static int add(int a,int b){
int z = a + b;
return z;
}
public static double add(double a,double b){
double z = a + b;
return z;
}
最后,我就来考考小伙伴们,在下面的代码中,哪些变量是实参,哪些变量是形参?另外,在下面的代码中,还有一处错误,不知道你是否看出来了呢?欢迎大家评论区互动
public static void main(String args[]){
int x = 0;
int y = 0;
sub(a,y);
}
public static void sub(int a,int b){
int c = a - b;
return c;
}