假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹。发射炮弹的动作需要编写100行代码,在每次实现发射炮弹的地方都需要重复的编写这100行代码,这样程序会变得很臃肿,可读性也非常差。为了解决这一问题,可以将发射炮弹的代码提取出来放在一个{}中,并为这段代码起个名字,这样在每次发射炮弹的地方通过这个名字来调用发射炮弹的代码就可以了。
上述过程中,所提取出来的代码可以被看做是程序中定义的一个方法,程序在需要发射炮弹时调用该方法即可。
1.方法的简单理解:就是完成特定功能的代码块
在很多语言中都有方法的定义,有着语言有着函数的叫法。在java中函数就是方法,方法就是函 数。(scala中函数是函数=>,方法是方法=)
2.方法的定义格式
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...){
函数体;
return 返回值;
}
3.方法格式解释
1)修饰符:修饰符比较多,目前只需要记住一个组合 public static
2)返回值类型:用于限定返回值的类型,参考使用的Scanner。
没有返回值的时候,返回值类型写void
3)方法名:一个名称,方便我们调用方法,必须要符合标识符规则
4)参数类型:限定调用方法时传入参数的数据类型
5)参数名:是一个变量,接收调用方法时传入的参数
形参:定义在方法上的参数名
实参:将来调用方法实际传入的值
6)函数体:将来要实现功能的代码
7)return:结束方法以及返回方法指定类型的值。一般情况下,有返回值的方法,才有return。
注意:return返回的结果类型要和方法定义的返回值类型要一致
8)返回值:程序被return带回的结果,返回给调用者
4.注意事项
1)方法不调用坚决不会执行
2)方法定义的时候参数之间用英文逗号隔开
3)方法调用的时候不用传递数据类型
4)方法与方法是平级关系,不能嵌套定义
5)如果方法有明确的返回值,一定要有return带回一个值
public class FunctionDemo1 {
public static void main(String[] args) {
//需求:计算两个int类型的数据之和
int a = 10;
int b = 20;
/**
* 有返回值的方法调用的时候,一般情况下,有两种处理方法
* 1.定义一个变量接收方法的返回值,推荐使用这种方式,因为这种方式灵活度更高
* 2.直接输出或者直接使用
*/
int res1 = sum(a, b);
System.out.println("a+b的和为:" + res1);
System.out.println("a+b的和为:" + sum(a, b));
}
/**
* 有返回值
* 参数是两个int类型的数据
*/
public static int sum(int a1, int b1) {
return a1 + b1;
}
}
5.方法的相关练习题
a)有返回值的情况
键盘录入两个数据,比较两个数据是否相等
import java.util.Scanner;
public class FunctionTest2 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数据:");
int num1 = sc.nextInt();
System.out.println("请输入第二个数据:");
int num2 = sc.nextInt();
//调用方法
boolean res = isEquals(num1, num2);
System.out.println(res);
}
/**
* 定义方法比较两个数是否相等
* 返回值类型:boolean
* 参数列表:int a,int b
*/
public static boolean isEquals(int a, int b) {
return a == b;
}
}
键盘录入三个数据,返回三个数中的最大值
import java.util.Scanner;
public class FunctionTest3 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数据:");
int num1 = sc.nextInt();
System.out.println("请输入第二个数据:");
int num2 = sc.nextInt();
System.out.println("请输入第三个数据:");
int num3 = sc.nextInt();
//调用方法进行比较
int maxNum = getMax(num1, num2, num3);
System.out.println("最大值为:" + maxNum);
}
/**
* 定义方法求出三个数中最大值
* 返回值类型:int
* 参数列表:int a,int b,int c
*/
public static int getMax(int a, int b, int c) {
int res1 = (a > b) ? a : b;
int res2 = (res1 > c) ? res1 : c;
return res2;
}
}
b)没有返回值的情况
键盘录入行数和列数,输出对应的星形
import java.util.Scanner;
public class FunctionTest4 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入要打印的行数:");
int rowNum = sc.nextInt();
System.out.println("请输入要打印的列数:");
int colNum = sc.nextInt();
//调用方法打印对应的星形
//调用方法的时候,不需要传入数据类型
printStar(rowNum, colNum);
}
/**
* 定义方法打印星形
* 返回值类型:void
* 参数列表:int rowNum,int colNum
*/
public static void printStar(int rowNum, int colNum) {
for (int i = 1; i <= rowNum; i++) {
for (int j = 1; j <= colNum; j++) {
System.out.print("*\t");
}
System.out.println();
}
}
}
键盘录入一个数据n(1<n<9),输出对应的nn乘法表
import java.util.Scanner;
public class FunctionTest5 {
public static void main(String[] args) {
//创建键盘录入格式
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个大于1小于9的数:");
int num = sc.nextInt();
printJiuJiu(num);
}
/**
* 定义方法打印nn乘法表
* 返回值类型:void
* 参数列表:int num
*/
public static void printJiuJiu(int num) {
for (int i = 1; i <= num; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "*" + j + "=" + (i * j) + "\t");
}
System.out.println();
}
}
}