重点掌握方法是什么?为什么要使用?如何进行方法的定义?
方法
方法又称为函数,在程序中方法表示功能。
方法的适用性:当程序中有一段表示是功能且重复的业务逻辑代码,可以用方法来封装,模块化编程,易于程序维护。
方法的好处:使用方法封装功能,那么该功能只需要定义一次,多次使用,实现复用,减少代码冗余。
方法语法:
[访问修饰符] 返回值类型 方法名 ([参数]){
方法体
}
-
访问修饰符: 控制当前内容可见的范围.
-
返回值类型:
- 没有返回值类型 用void表示无返回值.方法中如果需要遇到某些条件需要退出方法,用return; 即可。
- 如果有,则再该位置写上具体的要返回的类型即可,其次要在方法体的结束代码之前 写上 return 表示退出 且在return写上要返回的具体数据,这个数据要与当前方法的返回值类型匹配.
-
方法名:见名知意(小驼峰命名)
-
参数:在方法小括号中写的参数叫做形式参数,意味占一个坑,具体参数内容是什么,由调用方法的人来决定.
- 参数语法: 参数类型 变量名(见名知意)
-
方法体:用来存放该方法的逻辑
-
方法的4种形式:
-
无参无返回值方法
/** * 需求:只是为了复用一段逻辑代码! * 目的: 一定定义多次使用,减少代码冗余 */ static void attack() {//自定义方法需要调用才能执行! System.out.println("一个右鞭腿"); System.out.println("一个左刺拳"); System.out.println("一个过肩摔"); System.out.println("年轻人!好自为之!"); }
-
有参无返回值方法
/** * 需求:做一个问好的功能 sayHi 功能需要通用的! * 目的: 希望谁调用sayHi 谁决定问谁! */ static void sayHi(String name,int age){ //自定义方法需要调用才能执行! System.out.println( name + "同学你好!,我的年龄是:"+age); }
-
无参有返回值方法
/** * 需求:做一个获取PI值的功能方法 * 目的: 让调用者可以通过该功能,获取到一份数据PI: 3.1415926 */ static double getPi() { return 3.1415926; }
-
有参有返回值方法
/** * 需求:写一个计算和的功能方法. * 目的:通过外部传入两个int类型的数据 ,方法中计算传入进来的数据相加和,并返回给调用者 * 有参:为了让调用方法的人决定计算什么数据. * 有返回值:计算后将结果给调(使)用者 */ static int sum(int a, int b) { return a + b; }
-
方法练习
2.做一个计算三个int值相加和功能,通过调用方法传递两个运算的数据,该方法则返回运算结果.
static int sum1(int a, int b, int c) {
return a + b + c;//返回传入数据的运算结果
}
3.做一个计算两个double值相加和功能,通过调用方法传递两个运算的数据,该方法则返回运算结果.
static double sum2(double a, double b) {
return a + b;//返回传入数据的运算结果
}
测试:
public static void main(String[] args) {
int r = sum(10, 20);
System.out.println(r);
int r1 = sum1(10, 20,30);
System.out.println(r1);
int r2 = sum2(1.23, 2.2);
System.out.println(r1);
}
问题:上述需求功能一致都是在做求和的方法,只是方法参数个数或方法类型不同导致书写了多个方法,对于调用方法来说,需要记不同的方法名字,比较麻烦。
解决:可以使用方法的重载用一个名字表示同一个功能。
方法的重载
好处:当方法参数个数或方法类型不同导致书写了多个方法时,如果这些方法功能一致,我们可以用一个方法名来表示。
重载条件:当方法的参数个数或参数类型不同时,用一个方法名表示这些功能即可。
目的:让使用者只只需要调用一个功能,即可满足不同的需求。
//我们尽可能让使用者直接使用功能即可,具体根据用户传入的参数个数或参数类型 让程序来区分执行哪个方法。
//重载条件:方法参数个数或参数类型不同 方法名一样即可构建重载
static int sum(int a, int b) {
//int result = a + b;
return a + b;//返回传入数据的运算结果
}
static int sum(int a, int b, int c) {
return a + b + c;
}
static double sum(double a, double b) {
return a + b;
}
测试:调用一个名为sum的方法只需要根据自己的需求传入需要求和的数据即可,编译器会根据传入的参数自动匹配已有的方法进行使用。
public static void main(String[] args) {
int r = sum(10, 20);
System.out.println(r);
int r1 = sum(10, 20,30);
System.out.println(r1);
int r2 = sum(1.23, 2.2);
System.out.println(r1);
}
/**
* 方法练习:
*/
public class ArrayDemo02 {
public static void main(String[] args) {
/**
* 编写一个程序,求出下列数组中最大的数据并打印输出出来 。
* 思路:假设数组中第一个元素为最大值。声明max变量接收这个最大值。
* 如果max < 当前参与比较的数据..则将 当前参与比较的数据 赋值给max
* max最终则存放数组中最大值。
*/
int[] array = {100, 40, 20, 60, 700, 5};
int max = getArrayMax(array);//调用方法 传入需要运算的数组
System.out.println("max值为:" + max);
int[] array1 = {300, 400, 500, 100, 1000, 50};
int max1 = getArrayMax(array1);//调用方法 传入需要运算的数组
System.out.println("max值为:" + max1);
int[] array2 = {300, 400, 500, 6000, 1000, 50};
int max2 = getArrayMax(array2);//调用方法 传入需要运算的数组
System.out.println("max值为:" + max2);
}
static int getArrayMax(int[] array) {//有参有返回值方法 方法好处:一次定义多次使用。
int max = array[0];//假设数组中第一个元素为最大值
for (int i = 0; i < array.length; i++) {
if (max < array[i]) {//如果max小于当前数组的数据
max = array[i];//数组数据 赋值给 max
}
}
return max;
}
}
方法定义小技巧,所有方法的定义都是基于功能需求的前提,根据功能需要来进行选择:
1.什么时候使用无形式参数的方法?
答:当定义方法时,不需要外部传递数据就能保证方法的复用,则可以不用写参数.
2.什么时候使用有形式参数的方法?
答:当定义方法时,方法体的逻辑定义某些数据一旦写死,方法的使用则变的无法复用,那么就可以将该数据内容以形式参数的方法定义.让外部调用者决定传递具体数据.
3.什么时候使用无返回值的方法?
答:当定义方法时,方法被调用后,无需返回给调用者一些信息数据等,则无需定义方法返回值类型,使用void表示该方法没有返回值类型.
4.什么时候使用有返回值的方法?
答:当定义方法时,方法被调用后,需要返回给调用者一些信息数据等,则需要根据返回的数据类型,将数据类型定义在返回值类型的位置,且在方法结束花括号之间使用return 语句,return 需要返回的具体数据即可