方法
一、什么是方法
方法是程序中的最小执行单元。
- 方法作为最小执行单元,其中的代码会一起执行,就不能有这部分执行,那部分不执行的可能了。
- 方法就是将一部分代码进行“打包”,在需要的时候直接进行调用,避免代码过高的重复率,提高复用性和可维护性。
二、方法的格式
方法的使用:把代码打包在一起,用到的时候就调用。
方法定义:把一些代码打包在一起,该过程称为方法定义。
方法调用:方法定义后并不是直接运行的,需要手动调用才能执行,该过程称为方法调用。
2.1 简单的方法定义和调用
示例:
public class MethodDemo1 {
public static void main(String[] args) {
number();
}
public static void number(){
System.out.println("123");
System.out.println("456");
System.out.println("789");
System.out.println("0");
}
}
2.2 带参数的方法定义和调用
示例:
ublic class MethodDemo3 {
public static void main(String[] args) {
getsum(10, 20);
getsum(20, 30);
getsum(30, 40);
}
public static void getsum(int num1, int num2){
int sum = num1 + num2;
System.out.println(sum);
}
}
形参和实参
2.3 带返回值方法的定义和调用
方法的返回值其实就是方法运行的最终结果。
为了在调用处拿到方法产生的结果,就需要定义带有返回值的方法。
package method;
public class MethodDemo4 {
//用带返回值的方法定义调用 求一个商场的年度营业额
public static void main(String[] args) {
// // 直接调用
// getsum(10, 20, 30);
//
// // 赋值调用
// int sum = getsum(10,20,30);
// System.out.println(sum);
//
// // 输出调用
// System.out.println(getsum(10, 20, 30));
// 继续题目:求一个商场的年度营业额
int sum1 = getsum(10, 20, 30);
int sum2 = getsum(15, 24, 31);
int sum3 = getsum(9, 27, 24);
int sum4 = getsum(16, 22, 25);
int allyear = sum1 + sum2 + sum3 +sum4;
System.out.println("年度营业额为:" + allyear);
}
public static int getsum(int num1, int num2, int num3){
int result = num1 + num2 + num3;
return result;
}
}
2.4 方法小结
- 方法不调用就不执行;
- 方法与方法之间是平级关系,不能互相嵌套;
- 方法的编写顺序和执行顺序无关;
- 方法的返回值类型为void,表示该方法没有返回值没有返回值的方法可以省略return语句不写。如果要编写return,后面不能跟具体的数据;
三、方法的重载
public class test4 {
//需求:使用方法重载的思想,设计比较两个整数是否相同的方法
// 要求:兼容全整数类型 (byte,short,int,long)
public static void main(String[] args) {
compare(10,20);
}
public static void compare(byte num1, byte num2){
System.out.println(num1 == num2);
}
public static void compare(short num1, byte num2){
System.out.println(num1 == num2);
}
public static void compare(int num1, int num2){
System.out.println(num1 == num2);
}
public static void compare(long num1, long num2){
System.out.println(num1 == num2);
}
}
四、练习
练习一:
package test;
public class test5 {
//需求:设计一个方法用于数组遍历,要求遍历的结果是在一行上的。例如:[11,22,33,44,55]
public static void main(String[] args) {
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.print("]");
}
}
return和break关键字的区别
- return:其实跟循环没有什么关系,跟方法有关的,表示1结束方法 2返回结果如果方法执行到了return,那么整个方法全部结束,里面的循环也会随之结束了。
- break关键字
其实跟方法没有什么关系,结束循环或者switch的。
练习二:
public class test7 {
//定义一个方法判断数组中的某一个数是否存在,将结果返回给调用处
public static void main(String[] args) {
int[] arr = {5, 46, 13, 59, 21, 38, 19, 44};
boolean flag = isExist(arr, 59);
System.out.println(flag);
}
public static boolean isExist(int[] arr, int num){
for (int i = 0; i < arr.length; i++) {
if (arr[i] == num){
return true;
}
}
return false;
}
}
五、方法的内存
5.1基本数据类型和引用数据类型
方法在栈内存中执行,遵循栈的“先进后出”原则。当出现new关键字时使用堆内存。
基本数据类型和引用数据类型:
5.2 方法传递基本数据类型/引用数据类型的内存原理
小结:
- 基本数据类型传递时传递的是真实的数据,修改方法里的值,方法结束后,是不影响原来的值的
- 引用数据类型传递的是地址值,因此当形参改变时,实际参数值也会变