⭐前言⭐
※※※大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入学习模式。若有错误,请多多指教。
👍** 点赞 ⭐ 收藏 📝留言 都是我创作的最大的动力!**
1.什么是方法?
**方法是一些Java语句构成的代码块,用来共同实现某些功能。**和C语言的函数类似。
方法像洗衣机,我们提供一些脏衣服,洗衣液(参数),通过洗衣机的运转(方法体),脏衣服就变成干净的衣服(返回值)。
方法的意义:
(1)使相同的功能的代码聚集在一起,提高代码的可读性。
(2)频繁使用某个功能,使用方法只用编写一次,大大提高了编写代码的效率。
方法的注意点:
(1)方法只有在调用的时候会被执行,方法不被调用时不会被执行的 。
(2)方法中的变量都属于局部变量。方法结束之后,局部变量占用的内存会自动释放。
(3)修改方法的形参,方法的实参不会改变,可以理解为形参是实参的备份。
2.方法定义
// 修饰符 返回值类型 方法名(参数类型 参数名) {
// ...
// 方法体
// ...
// [return 返回值; ]//return可以终止方法,
// }
//求长方形的面积
public static int rectangleArea(int a, int b){
return a * b; //方法体
}
(1)修饰符: pubic、static、final、private等
(2)返回值类型:如果方法有返回值,返回值的类型需要和return后面的返回值类型一致
返回值的类型**由小转大,**编译器可以自动转换,但会提出**警告。**
** ** ** 例如上例题中将int变成long;**
** 返回值的类型由大转小,编译器会报错,需要将return 后的数据强转为相应类型。**
** 例如:例题中将int变成short;需要将ab 改成(short)(ab)**
(3)方法名:采用小驼峰命名法:
第一个单词以小写字母开始,第二个单词的首字母大写。例如:firstName。
(4)参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个 参数之间使用逗号隔开。
(5)方法体:实现某些特定功能的语句。
(6)在Java中,方法必须定义在类中,方法不能嵌套定义,没有方法声明一说。
3.方法的调用
方法的调用过程:
调用方法---**>*传递参数---*>*找到方法地址---*>*执行被调方法的方法体---*>被调方法结束返回---**>回到主调方法继续往下执行。
public class Mian{
public static int rectangleArea(int a, int b){
return a * b; //方法体
}
public static void main(String[] args) {
int ret = rectangleArea(5, 7); //实参
System.out.println("长为7,宽为5的长方形的面积为:" + ret);
}
}
(1)** 形参和实参的类型需要一一对应,顺序也需要一一对应。**
(2)调用过程为,先执行main方法,执行到rectangleArea这个调用方法会调用该方法,将 5,7两个实参分别传给a,b两个形参。找到rectangleArea的地址,执行return a *b; rectangleArea方法结束销毁。 执行main函数下面的代码。
(3)方法调用时什么时候“类名.”是可以省略的。什么时候不能省略?
** a()方法调用b()方法的时候,a和b方法都在同一个类中,“类名.”可以省略
如果不在同一个类中“类名.”不能省略。**
4.用方法来交换a,b的值;
public static void swap(int a, int b){
int tem = a;
a = b;
b = tem;
}
public static void main(String[] args) {
int a = 5 ,b = 8;
System.out.println("交换前:a = " + a + ", b = " + b);
swap(a,b);
System.out.println("交换后:a = " + a + ", b = " + b);
}
//输出结果:
// 交换前:a = 5, b = 8
// 交换后:a = 5, b = 8
有没有小伙伴会这样写;
由于形参a和b只是实参的备份,所以修改备份,原数据不会改变。备份在方法调用结束后就会被销毁。而你交换前,后都是在打印的原数据。所以才会出现没有交换的局面。
就好像小明有一个房子。开发商重新盖了一个一模一样的房子,里面什么家具,装修风格和小明的一样。开发商现在把这个房子卖给了小王。不管小王在房子里怎么折腾,都不会影响你房子里面的东西;
**正确的解决办法: **
public static void swap(int[] arr){
int tem = arr[0];
arr[0] = arr[1];
arr[1] = tem;
}
public static void main(String[] args) {
int[] arr = {5, 8};
System.out.println("交换前:arr[0] = " + arr[0] + ", arr[1] = " + arr[1]);
swap(arr);
System.out.println("交换后:arr[0] = " + arr[0] + ", arr[1] = " + arr[1]);
}
/*输出结果:
交换前:arr[0] = 5, arr[1] = 8
交换后:arr[0] = 8, arr[1] = 5*/
为什么传入数组就可以进行交换了呢?
这是因为数组是引用类型,你传给形参的只是一个地址,方法修改的是该地址内的数据,而main函数也是调用的该地址内的数据。
就好像小明有一个房子。开发商把小明房子的钥匙复制了一份,开发商现在把复制的这个钥匙卖给了小王。小王是个邋遢大汉,等到你回到家时,你发现你的房子里面像遭了贼一样。
5.方法重载
为了防止程序员要记很多功能相似的方法名,加重程序的负担,就有了方法的重载;
例如同是两数相加 由于形参的类型不同,可能会有addDoulbe,addInt,addFloat,addLong等方法;所以可不可以把这些方法的方法名都变成add呢?所以就出现了方法的重载。
在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了
重点:
**(1)方法名必须相同 **
**(2)参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同) **
(3)与返回值类型是否相同无关
例:
方法的重载:需要的是方法名一样,与方法的返回值无关。所以我们只需要关注方法的形参
** ** 因为long b 和int b 的参数类型不同,可以构成重载。
这是由于参数的****次序不同,可以构成重载
这是由于参数的数目不同,可以构成方法的重载
我们 比较的是参数的类型不同,而不是参数名不同,即使返回不同,这种情况也不能构成方法的重载。
方法中不能定义两个名字相同的变量,为什么类中可以定义两个方法名相同的方法呢?
这是因为方法经过编译器编译后的名字为
方法全路径名**+参数列表+返回值类型,构成方法完整的名字。**
并不是单单靠方法名来区分的,只要参数列表不同,就可作为区分;
例如:
public static long add(int a, int b){ }方法的完整名字为:**long add (int, int)**
6.break、return 和 System.exit()的区别;
(1)break用来终止switch和离它最近的循环。
(2)return用来终止离它最近的一个方法。
(3)System.exit()用来结束程序运行。
版权归原作者 同学〖森〗 所有, 如有侵权,请联系我们删除。