1.什么是方法?
(1)定义:方法是程序中最小的执行单元。
(2)有什么作用?
-
提高代码复用性;
-
可以提高代码的可维护性。
(3)实际开发,什么时候用到方法?
-
重复代码、具有独立功能的代码可以抽取到方法中。
2.方法的格式:
(1)方法的定义:
将一些代码打包一起
public static 返回值类型 方法名(参数) {
方法体;
return 返回值;
}
例:public static void main(String[] args) {
int sum=playGame(12,23,34);
System.out.println(sum);
}
public static int playGame(int num1,int num2,int num3){
int result=num3+num1+num2;
return result;
}
(2)方法的调用
-
方法名();
-
注意:方法必须先定义后调用;
方法与方法之间是平级关系,不能互相嵌套定义;
(3)例:
public static void main(String[] args) {
playGame();
playGame();
}
public static void playGame(){
System.out.println("开局");
System.out.println("对战");
System.out.println("炫技能");
System.out.println("结束");
}
(4)带参数的方法定义和调用:
-
单个参数:
-
定义:public static void(参数){……}
-
调用:方法名(参数);
-
-
多个参数:
-
public static void(参数1,参数2,……){……}
-
调用:方法名(参数1,参数2,……);
-
(5)形参和实参:
-
形参:指方法定义中的参数;
-
实参:方法调用的参数;
-
注意:方法调用是,形参和实参必须一一对应。
(6)总结:
-
什么时候·用到有返回值方法?
-
在调用处要根据方法的结果。去编写另外一段代码;
-
-
有返回值方法的调用格式:
-
直接调用、赋值调用、输出调用
-
(7)练习:
-
需求,定义方法,比较两个长方形的面积
public static void main(String[] args) {
double area1 = getArea(5.3, 2.4);
double area2 = getArea(3.3, 9.4);
if(area1>area2){
System.out.println("第一个长方形更大");
}else {
System.out.println("第二个长方形更大");
}
}
// 方法的调用处,是否需要继续使用方法的结果?
// 如果要用,那么方法必须有返回值
// 如果不要用,方法可以写返回值,也可以不写返回值
public static double getArea(double len,double width){
double area=len * width;
return area;
}
3.方法的重载:
(1)定义:
-
同一个类中,方法名相同,参数不同的方法。与返回值无关。
-
参数不同:个数不同、类型不同、顺序不同;
4.练习:
(1)数组遍历:
需求:设计一个方法用于数组遍历,要求遍历结果在一行上。例:[11,22,33,44,55]
public static void main(String[] args) {
// 设计一个方法用于数组遍历,要求遍历结果在一行上。例:[11,22,33,44,55]
int[] arr={11,22,33,44,55};
printArr(arr);
}
public static void printArr(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if(i== arr.length-1){
System.out.print(arr[i]);
}else {
System.out.print(arr[i] + ",");
}
}
System.out.println("]");
}
(2)数组最大值:
需求:设计一个方法求数组的最大值,并将最大值返回
public static void main(String[] args) {
// 设计一个方法求数组的最大值,并将最大值返回
int[] arr={11,22,33,44,55};
int num=printMax(arr);
System.out.println(num);
}
public static int printMax(int[] arr) {
int max=arr[0];
for (int i = 1; i < arr.length; i++) {
if(max<arr[i]){
max=arr[i];
}
}
return max;
}
(3)判断数据是否存在:
定义一个方法判断数组中的某一个数是否存在,将结果返回给调用处
public static void main(String[] args) {
// 定义一个方法判断数组中的某一个数是否存在,将结果返回给调用处
int[] arr={11,22,33,44,55};
int number=44;
boolean outcome=printNum(arr,number);
System.out.println(outcome);
}
public static boolean printNum(int[] arr,int number) {
for (int i = 1; i < arr.length; i++) {
if(number==arr[i]){
return true;
}
}
return false;
// return break关键字区别?
// return:其实跟循环没有什么关系,跟方法有关的,表示1结束方法;2返回结果;
// 如果方法执行到return,那么整个方法全部结束,里面的循环也会随之结束;
}
(4)复制数组:
需求:定义一个方法copyOfRange(int[] arr,int from,int to)
功能:将数组arr中从索引from(包含from)开始。
到索引to结束(不包含to)的元素复制到新数组中,将数组返回
public static void main(String[] args) {
//需求:定义一个方法copyOfRange(int[] arr,int from,int to)
//功能:将数组arr中从索引from(包含from)开始。
// 到索引to结束(不包含to)的元素复制到新数组中,将数组返回
int[] arr={11,22,33,4,5,55,66};
int[] copyArr = copyOfRange(arr, 2, 6);
for (int i = 0; i < copyArr.length; i++) {
System.out.print(copyArr[i]+" ");
}
}
public static int[] copyOfRange(int[] arr,int from,int to) {
// 定义一个数组
int[] arr1=new int[to-from];
int index=0;
for (int i = from; i < to; i++) {
arr1[index]=arr[i];
index++;
}
return arr1;
}
5.方法的基本内存原理:
-
传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数值;
-
传递引用数据类型时,传递的是地址值,形参的改变,影响实际参数值;