方法
方法的作用:
解决代码重复的问题,对某个特定的代码进行封装
1.谁能用
2.返回的是什么,返回值的类型
3.方法的名称,通过什么来调用
4.该功能需要什么东西,形式参数*/
方法定义:
1.public static,修饰符,谁都可以用
2.void,没有返回,int,返回值是int
3.main,方法名,标识符.和变量的规范一样,首字母小写
4.(String[] args),形参列表
public static void main(String[] args){}
语法:[修饰符] 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,参数类型 参数n){
// 方法体(方法的功能性代码)
return 返回值;
}
举例:
ublic static int getSum(int x,int y){
//定义一个方法,并且向里面传入形参
//如果是void表示不需要返回值,不能接收,没有return
//如果不是void表示需要返回值,定义变量去接收,有return
int sum=x+y;//定义一个变量来接收返回值
return sum;
}
public static void main(String[] args){
System.out.println(getSum(2,3));//传入实参,,使用getSum方法传入参数,返回结果5
}
注意:
1.方法定义在类中
2.一个类有多个方法
3.方法和方法是平行关系,不能再一个类中定义另一个类,且定义没有先后顺序
方法的调用
语法:
语法格式:返回值类型 变量 = 方法所在类名.方法名(实际参数);
int result = MethodDemo.getSum(2 , 3);
System.out.println(result); //输出5
//需求3:定义一个方法,传入一个int数组,返回指定元素在数组中第一次出现的索引
//返回值的类型:int
//形参:int[] arr,int key
public static int indexOf(int[] arr, int ele) {//定义行数和字符串
for (int i = 0; i < arr.length; i++) {
if (ele == arr[i]) {
return i;//返回数据到调回的地方,同时结束当前方法
}
}
return -1;//没找到时返回-1(索引时>=0)
}
public static void main(String[] args) {
int index = indexOf(new int[]{1, 5, 6, 8, 7, 9}, 7);
System.out.println(index);
}
**return返回值注意事项:**一个方法如果需要返回值,应该在任何情况都需要返回,否则报错,不需要使用返回
**判断何时使用return:**如果调用这个方法后,所得到的结果需要使用方法中产生的数据,就需要return,
**实际参数注意事项:**所传入的数据类型应该和方法中定义的数据类型一致,顺序相同
方法的可变参数(使用较少)
是一种语法糖,只有当数据个数不定的时候使用
方法的可变参数其底层是就是一个一维数组类型
在方法中的语法格式为:public static double getTotalprice(数据类型 变量名称,数据类型**(这里没有[])**…变量)
-
可变参数必须作为方法的最后一个参数,避免多个参数的歧义性
-
推论:方法最多只有一个可变参数
-
调用元素时,可以将数组中的元素直接传递,仅限于数组类型
示例:
//定义一个方法,传入两个参数,一个double数组表示多个货品的价格,一个double类型的折扣,返回货品总价格(使用可变参数) public static double getTotalprice( double cutoff,double... prices) {//数组放在在后面使用, double sum = 0.0; for (double price : prices) { sum += price; } return sum * cutoff; } public static void main(String[] args) { double totalprice = getTotalprice(0.6,12.35, 54.54, 65.58, 87.58, 36.21);//传入实参 System.out.println(totalprice); }
方法重载
方法重载的判断原则:两同一不同
两同:多个方法同一个类中,方法名称相同
一不同:参数列表不同(分为:参数类型不同,参数个数不同,参数顺序不同)
方法重载的作用::屏蔽了同一功能的方法由于参数不同所造成方法名称不同。
**注意:**方法重载和方法的返回值类型无关,只是一般要求返回值类型相同。
示例
public static int getSum(int x,int y){
return x+y;
}
//根据传入参数可以区分
public static double getSum(byte x,int y){
return x+y;
}
public static double getSum(double y,int x){
return y+x;
}
public static int getSum(int x,int y,int z){
return x+y+z;
}
方法参数的值传递机制
含义:方法在调用时把实参的值复制一份给形参的过程
(1)基本类型参数
传递规则:只传递参数类型的值,只会改变被调用方法中的值,不会影响主方法里面的值
示例:
static void change(int x) {//将a的值赋值给x
System.out.println("change before,x=" + x);//10
x = 100;// 修改x变量的值=10
System.out.println("change after,x=" + x);//100
}
public static void main(String[] args) {
int a = 10;
System.out.println("main before,a=" + a);//10
change(a);
System.out.println("main after,a=" + a);//10
(2)引用类型参数
传递规则:传递参数所引用的堆空间地址值,即数组原有的地址
其会改变原有数组中的值,因为是地址中的数值被改变了
示例;
static void change(int[] arr) {
System.out.println("change before,arr[0]=" + arr[0]);//10
arr[0] = 30;//修改数组中第一个元素的值,该数组的地址没有变,里面只改变了索引0的值
System.out.println("change after,x[0]=" + arr[0]);//30
}
public static void main(String[] args) {
int[] a = new int[] { 10, 90 };
System.out.println("main before,a[0]=" + a[0]);//10
change(a);//arr[0]中地址的值已经发生了改变,被替换成了30
System.out.println("main after,a[0]=" + a[0]);//30
}
nt[] a = new int[] { 10, 90 };
System.out.println("main before,a[0]=" + a[0]);//10
change(a);//arr[0]中地址的值已经发生了改变,被替换成了30
System.out.println("main after,a[0]=" + a[0]);//30
}