Java_Day9(方法的解读、分类、定义、返回值和参数、重载,参数的传递)
解读方法
方法:是一个具有特定功能的代码/代码片段的合集
方法必须先定义后使用
方法可以是JDK提供的,也可以是自己定义的
public static void main(String[] args){
}
public static :方法的访问修饰
void : 方法的返回值类型
main: 方法的名称 (方法的命名遵守小驼峰命名法)
String[] args: 方法的参数
{}:方法打的具体内容
方法的分类
- 根据返回值类型:
有返回值和无返回值 - 根据参数:
有参合无参
方法的定义
Public static 返回值类型 方法名称 ([参数列表]){ 方法体}
方法的定义需要注意:
- 是否有返回值,如果有,需要明确返回值类型 如果没有则为void
- 是否有参数,如果有,需要明确有几个参数以及每个参数的类型
方法的使用:
- 定义了方法以后,方法不能自己执行 ,需要在main方法或其他已经被main调用的 方法中手动进行调用。
- 方法只有调用了才会执行
- 一个类中可以有多个方法
- 方法之间的关系是平行的,不可以嵌套使用
方法的返回值及参数
- 方法是否有返回值根据方法的功能决定
- 方法的参数根据方法的具体功能决定
- 方法具有通用性,是用来解决一类问题的这样的一个代码片段
注:
- 返回值:
如果方法有返回值,使用return进行返回,return后跟返回的值或者结果
如果没有返回值,则return可以省略- 参数:
在方法定义时确定参数的个数及类型
方法被调用时,需要和定义时的参数相对应
形参和实参的区别和联系
- 形参只有在函数被调用时才会被分配内存,调用结束后释放,只在函数内部有效,不能在函数外部使用
- 实参可以是常量、变量、表达式、函数等,在进行函数调用时。实参必须有确定的值
- 实参和形参在数量、类型、顺序上必须严格一致,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型
- 函数调用中数据传递是单向的,只能把实参的值传递给形参,不能反向进行,一旦完成数据的传递,实参和形参就没有任何联系了,所以形参的值发送改变并不会影响实参
方法的执行内存分析
当方法被调用时才创建内存,结束时即释放
方法的重载
public class MethodDemo_02 {
// 需求:计算两个整数的和
public static int sum(int a , int b ){
//return a + b;
int s = a + b;
return s;
}
// 需求 计算三个整数 的 和
public static int sum(int a , int b , int c){
return a + b + c;
}
// 需求 计算两个整数和一个 浮点数 的和
public static double sum (int a,int b,double d){
return a + b + d;
}
public static double sum (double a,int b,int d){
return a + b + d;
}
public static void main(String[] args) {
int s = sum(5,6);
System.out.println(s);
int s1 = sum(5,6,7);
System.out.println(s1);
double s2 = sum(5,6,5.6);
System.out.println(s2);
double s3 = sum(5.6,7,8);
System.out.println(s3);
}
}
在sum方法之间构成了方法的重载
特点:
- 必须是同一个类中的方法
- 方法名称相同
- 参数列表不同
判断依据:
- 定义是否在同一个类中
- 方法的名称是否相同
- 参数列表是否不同:
- 个数不同
- 类型不同
- 类型不同的参数顺序不同
方法的返回类型不能作为方法重载的判断依据
对于重载的方法在调用的时候是由jvm自动根据传入的参数的情况来自动调用相匹配的方法
参数的传递
public class MethodDemo_03 {
// 交换两个整数的值
public static void change(int a , int b ){
int temp = a;
a = b ;
b = temp;
System.out.println(a +"======"+b);
}
// 交换数组中的两个元素的位置
public static void change(int[] arr , int index1 , int index2){
int temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] =temp;
for (int i = 0 ; i < arr.length; i++){
System.out.println(arr[i]);
}
}
public static void main(String[] args) {
int x = 8;
int y = 9;
change(x,y);
System.out.println(x + "---" + y);
int[] arr = {3,1,5,7,8,3,2,9};
change(arr,1,7);
System.out.println("-------------------------------");
for (int i = 0 ; i < arr.length; i++){
System.out.println(arr[i]);
}
}
}
交换两个整数的过程:
交换数组中两个元素的过程:
参数的传递:
- 值传递:
基本类型的数据传递都是值- 引用传递:
传递的都是地址区别:
值传递 :传递的是值的本身所以对于传递过去的值的修改,不会影响原来的值本身
引用传递 :由于传递的是地址,传递之后的两个引用指向的是同一个地址,所以任何的操作对引用的地址内容的修改都将影响到地址中的内容