一、方法
- 作用:用于封装一段特定的业务逻辑功能
- 建议:尽可能独立,一个方法只干一件事
- 方法可以被反复多次调用
- 好处:可以减少代码重复,有利于代码维护
- 何时用:只要是一个独立的业务功能,就得封装到一个方法中
二、方法的定义
修饰词 返回值类型 方法名(参数列表){
方法体---------具体的业务逻辑功能实现
}
//无参无返回值
public static void say(){
System.out.println("大家好,我叫WKJ,今年38岁了");
}
//有参无返回值
public static void sayHi(String name){ //----------------------形参
System.out.println("大家好,我叫"+name+",今年38岁了");
}
//有参无返回值
public static void sayHello(String name,int age){ //-----------形参
if(age>=60){ //在某种特定条件下,提前结束方法
return; //结束方法
}
System.out.println("大家好,我叫"+name+",今年"+age+"岁了");
}
//有参有返回值
public static int sum(int num1,int num2){
int num = num1+num2;
return num; //返回的是num里面的那个数
//return num1+num2; //返回的是num1与num2的和
}
//生成一个整型数组,并填充随机数据
public static int[] generateArray(int len,int max){
Random rand = new Random();
int[] arr = new int[len];
for(int i=0;i<arr.length;i++){
arr[i] = rand.nextInt(max+1); //包括max
}
return arr;
}
三、方法的调用
3.1、无返回值:方法名(有参传参)
public class MethodDemo {
public static void main(String[] args) {
say(); //自动绑定无参say
say("zhangsan"); //自动绑定String参的say
say("lisi",25); //自动绑定String+int参的say
say(); //自动绑定无参say
say("zhangsan"); //自动绑定String参的say
say("lisi",25); //自动绑定String+int参的say
//say(3.456); //绑定错误,没有double参的say
}
//无参无返回值
public static void say(){
System.out.println("大家好,我叫WKJ,今年40岁了");
}
//有参无返回值
public static void say(String name){ //------------------------形参
System.out.println("大家好,我叫"+name+",今年40岁了");
}
//有参无返回值
public static void say(String name,int age){ //-------------形参
if(age>=60){ //在某种特定条件下,提前结束方法
return; //结束方法
}
System.out.println("大家好,我叫"+name+",今年"+age+"岁了");
}
}
3.2、有返回值:数据类型 变量 = 方法名(有参传参)
//方法的演示
public class MethodDemo {
public static void main(String[] args) {
sum(1,2)
}
//有参有返回值
public static int sum(int num1,int num2){
int num = num1+num2;
return num; //返回的是num里面的那个数
//return num1+num2; //返回的是num1与num2的和
}
}
四、return
- return 值; //1)结束方法的执行 2)返回结果给调用方------------用在有返回值的方法中
- return; //1)结束方法的执行------------------------------------------用在无返回值的方法中
五、方法的重载(overloading)
发生在同一类中,方法名相同,参数列表不同
编译器在编译时会根据方法的签名自动绑定方法
public class MethodDemo {
public static void main(String[] args) {
say(); //自动绑定无参say
say("zhangsan"); //自动绑定String参的say
say("lisi",25); //自动绑定String+int参的say
//say(3.456); //编译错误,没有double参的say
}
//无参无返回值
public static void say(){
System.out.println("大家好,我叫WKJ,今年39岁了");
}
//有参无返回值
public static void say(String name){ //-----------------形参
System.out.println("大家好,我叫"+name+",今年39岁了");
}
//有参无返回值
public static void say(String name,int age){ //------形参
if(age>=50){ //在某种特定条件下,提前结束方法
return; //结束方法的执行
}
System.out.println("大家好,我叫"+name+",今年"+age+"岁了");
}
public static void say(int age) {} //正确的重载
public static void say(int age,String name){} //正确的重载
//public static int say(){ return 1; } //编译错误,重载与返回值类型无关
//public static void say(String address) { } //编译错误,重载与参数名称无关
}
六、基础案例
6.1、评委给选手打分
package day06;
import java.util.Scanner;
/**
* 需求:<<主持人大赛>>有N位评委给选手打分
* 选手的最终得分为:去掉最高分和最低分之后的N-2位评委的平均分
* 要求:使用方法实现
*/
public class CalAvg {
public static void main(String[] args) { //撒贝宁
double[] scores = inputData(6); //1)录入评委的评分
double avg = calAvg(scores); //2)计算平均分
System.out.println("平均分为:"+avg);
}
/** 该方法用于录入N位评委的评分 */
public static double[] inputData(int n){
double[] scores = new double[n]; //评分数组
Scanner scan = new Scanner(System.in);
for(int i=0;i<scores.length;i++){
System.out.println("请录入第"+(i+1)+"位评委的分数:");
scores[i] = scan.nextDouble();
}
return scores;
}
/** 该方法用于计算平均分 */
public static double calAvg(double[] scores){
double total = 0.0; //总分
double max = scores[0]; //假设第1个元素为最高分
double min = scores[0]; //假设第1个元素为最低分
for(int i=0;i<scores.length;i++){
total += scores[i]; //累加所有评分
if(scores[i]>max){ //找最高分
max = scores[i];
}
if(scores[i]<min){ //最低分
min = scores[i];
}
}
//计算平均分---总分减掉最高分和最低分之后,再除以(评委数-2)
double avg = (total-max-min)/(scores.length-2);
return avg;
}
}
6.2、 猜数字小游戏
import java.util.Random;
import java.util.Scanner;
/**
* 需求:猜数字小游戏
* 训练目标: while(true)自造死循环+break
*/
public class Guessing {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Random rand = new Random();
int num = rand.nextInt(1000)+1; //1到1000
System.out.println(num); //作弊
while(true){ //自造死循环
System.out.println("猜吧!");
int guess = scan.nextInt();
if(guess>num){
System.out.println("猜大了");
}else if(guess<num){
System.out.println("猜小了");
}else{
System.out.println("恭喜你猜对了!");
break; //跳出循环
}
}
}
}