005-java基础语法之方法
1、方法的定义
方法是一种语法结构,它可以把一段代码封装成一个功能,以方便重复调用。
public static void main(String[] args) {
}
/**
* @param a 第一个整数
* @param b 第二个整数
* @return 返回两个数字中较大的一个数字
*/
public static int getMax(int a, int b) {
int max = a > b ? a : b;
return max;
}
2、方法的格式
2.1 方法的格式一
/*
目标: 需要大家掌握方法的定义的格式,以及调用格式
格式:
public static void 方法名(){
}
调用:
方法名();
注意,方法写好之后,需要调用才能执行。
1. 方法定义之后,需要去调用才能执行。
2. 方法定义 需要放在方法外面
3. 方法到底有什么用?
方法主要是为了抽取相同逻辑的代码。可以简化我们的代码,因为我们只需要写一次就可以多次使用。
*/
public static void main(String[] args) {
isEvenNumber();
isEvenNumber();
isEvenNumber();
isEvenNumber();
}
//需求: 定义一个方法,实现判断一个数字是奇数还是偶数,如果是奇数,则输出"奇数"反之,输出 "偶数"
public static void isEvenNumber() {
System.out.println("这里调用了方法");
int a = 9;
if (a % 2 == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}
}
2.2 方法的格式二
/*
目标: 掌握带参数的方法的定义格式,以及调用格式 ,弄清楚有参数的好处
public static void 方法名(数据类型 变量名, 数据类型 变量名... ){
}
调用格式: 方法名(值 , 值...);
好处:
让我们方法更加灵活,增强方法的通用性。
*/
public static void main(String[] args) {
isEvenNumber2(10);
isEvenNumber2(15);
int b = 30;
isEvenNumber2(b);
}
public static void isEvenNumber2(int a) {
if (a % 2 == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}
}
2.3 方法的格式三
/*
目标:
掌握带返回值方法的定义的格式以及调用方式,理解返回值的作用
格式:
public static 数据类型 方法名(数据类型 变量名 ,数据类型 变量名....){
return 数据;
}
调用格式:
方法名(值); 不推荐,因为这样做拿不到方法给你返回的数据
数据类型 变量名 = 方法名(值); 推荐使用。因为我们调用完方法之后,可以拿到方法返回的数据
意义: 我们需要根据一个方法生成结果,用来组织另外一段代码逻辑
【如果调用方法的地方需要拿到自定义方法的结果,就返回】
*/
public static void main(String[] args) {
int sum1 = add(90, 100);
int sum2 = add(90, 90);
int sum = sum1 + sum2;
System.out.println(sum);
}
//任务一:计算两个小组的总成绩
//1. 在方法里面 添加上 return 数据; 数据 -> 你需要返回的数据
//2. 把void 改成这个数据对应的类型
public static int add(int a, int b) {
int sum = a + b;
System.out.println(sum);
return sum;
}
3、方法的注意事项
return 的作用:程序到 return 就结束整个方法
public static void main(String[] args) {
test();
}
public static void test(){
// return; //因为方法到这里就已经结束了
// int a = 10; //Unreachable statement 不能到达声明
for (int i = 0; i < 10; i++) {
if(i == 3){
return;
}
System.out.println(i);
}
System.out.println("方法结束了");
}
语法完整性
public static void main(String[] args) {
test();
}
//语法完整性
//不管走的是if 还是 else 都会返回一个数据
public static boolean test2( int a ){
/* if(a >= 10){
return true;
}else {
return false;
}*/
//Missing return statement 缺少一个返回值的声明
for (int i = 0; i < 5; i++) {
return true;
}
return true;
}
1.方法的形参可以是基本类型和引用类型 2.方法的返回值可以是基本类型,也可以是引用类型 3.方法形参如果是一个数组,接收的实参是这个数组的地址 4.方法内部对参数数组的元素进行更改后,不用返回这个数组 数据类型: 基本数据类型: byte short char int long float double boolean 引用数据类型: 数组,类,接口... 基本数据类型,变量名代表的就是具体的值 引用数据类型,变量名代表的是一个 内存地址 ,它没有具体的值,它用的是别人的。
4、方法重载
方法重载定义:
一个类中,可以存在多个同名的方法。但是 要求,参数列表不同【参数的个数不同,类型不同】
我们把这些方法的关系,称之为 : 方法重载。
JVM 在调用方法的时候,会根据参数的类型和个数对应去调用方法, 跟返回值类型没有关系
public static void main(String[] args) {
// method(10 ,20);
// sum(10 ,20 , 30);
sum(13.14 , 5.2);
}
public static int sum(int a , int b){
System.out.println("执行了两个整数的求和方法");
return a + b;
}
public static double sum(double a , double b){
System.out.println("执行了两个小数的求和方法");
return a + b;
}
public static int sum(int a , int b , int c){
System.out.println("执行了三个整数的求和方法");
return a + b + c;
}
5、参数传递
1、对于基本数据类型的参数,形式参数的改变,不影响实际参数的值
2、引用数据类型的参数,形式参数的改变,会影响实际参数值的变化
5.1 重点
public static void main(String[] args) {
int arr[] = {1, 3, 5, 7, 9};
int num = 10;
showArray(arr, num);
System.out.println("arr[2]的结果是:"+arr[2]); //6
System.out.println("num的结果是:"+num); //10
}
private static void showArray(int[] arr, int num) {
arr[2] = 6;
num = 1;
}
6、综合练习
/*
定义返回值类型为 int 类型,名为 getScore(int[] arr)的静态方法,方法内完成:获取指定数
组 arr 中大于平均值的元素的个数,并返回。
目标: 返回大于数组平均值的元素的个数
数据: 数组
思路:
1. 需要求出平均值 ==> 平均值 = 总和 / 总个数
1.1 需要求和 ->
a. 在循环外定义一个 int sum = 0 用来接受和
b. 循环里面 sum += 要求的元素
c. 循环结束 sum 即为和
1.2
int avg = sum / arr.length;
2. 遍历数组,统计大于平均值的元素的个数
2.1 统计
a. 需要在循环外定义一个int count = 0; 用来计数
b. 遍历数组,用每一个元素和 平均值比较,如果大于平均值 count++;
c. 循环结束 count即为符合条件的个数
3. 返回count
*/
/*
定义 main 方法,方法内完成:
1).定义一个长度为 5 的 int 数组 arr
2).使用随机数生成 5 个范围为 1-99 的数字存入 arr 中(包含 1 和 99),之后打印数组
3). 调用 getScore(int[] arr)方法 ,传递 arr,获取方法返回值并在控制台打印输出该返回值
*/
public static void main(String[] args) {
//定义一个长度为 5 的 int 数组 arr
int[] arr = new int[5];
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
arr[i] = r.nextInt(99) + 1;
}
System.out.println(Arrays.toString(arr));
int count = getScore(arr);
System.out.println("大于平均值的元素个数是:" + count);
}
public static int getScore(int[] arr){
// a. 在循环外定义一个 int sum = 0 用来接受和
int sum = 0;
// b. 循环里面 sum += 要求的元素
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
//需要求出平均值
int avg = sum / arr.length;
System.out.println("平均值是:" + avg);
// 2. 遍历数组,统计大于平均值的元素的个数
// a. 需要在循环外定义一个int count = 0; 用来计数
int count = 0;
// b. 遍历数组,用每一个元素和 平均值比较,如果大于平均值 count++;
for (int i = 0; i < arr.length; i++) {
//如果大于平均值 count++;
if(arr[i] > avg){
count++;
}
}
//c. 循环结束 count即为符合条件的个数
return count;
}