第三周:学习方法
为什么要引入方法?
假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹(植物大战僵尸)。发射炮弹的动作需要编写100行的代码,在每次实现发射炮弹的地方都需要重复地编写这100行代码,这样程序会变得很臃肿,可读性也非常差。为了解决代码重复编写的问题,可以将发射炮弹的代码提取出来放在一个{}中,并为这段代码起个名字,这样在每次发射炮弹的地方通过这个名字来调用发射炮弹的代码就可以了。上述过程中,所提取出来的代码可以被看作是程序中定义的一个方法,程序在需要发射炮弹时调用该方法即可。
简单的说:方法就是完成特定功能的代码块,是语句的集合,它们在一起执行一个功能。 //很多语言里面都有函数或过程的定义,而函数在Java中被称作方法--->>>一个返回非void类型返回值的方法称为函数;一个返回void类型返回值的方法叫过程;
方法是解决一类问题的步骤的有序组合
方法包含于类或对象中
方法在程序中被创建,在其他地方被引用
方法的优点:
1. 使程序变得更简短而清晰。
2. 有利于程序维护。
3. 可以提高程序开发的效率。
4. 提高了代码的重用性。
方法的格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
函数体;
return 返回值;
}
格式解释:
修饰符:是可选的,告诉编译器如何调用该方法,定义了该方法的访问类型;
返回值类型:方法可能会有返回值,这时需要一个数据类型来限制返回值的类型;有些方法执行所需的操作,但没有返回值,这种情况下返回值为 void;
方法名:方法名是方法的实际名称,方法名和参数表共同构成方法签名。
参数类型:参数像是一个占位符,当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数,参数是可选的,方法可以不包含任何参数。 //用来限定调用方法时传入参数的数据类型
参数名:是一个变量,接收调用方法时传入的参数。
方法体:包含具体的语句,定义该方法的功能,完成功能的代码。
return:结束方法以及返回方法指定类型的值给调用者。
返回值:程序被return带回来的结果,返回给调用者。
如何写一个方法?
首先要有两个明确:
返回值类型:明确功能结果的数据类型;
参数列表:明确有几个参数,以及参数的类型;
写一个实例:
/** 返回两个整型变量数据的较大值 */
public static int getMax(int num1, int num2) {
int max;
if (num1 > num2)
max = num1;
else
max = num2;
return max;
}
方法调用
写完实例会发现执行看不到什么结果,这时就需要引入调用了;因为方法有一个很重要的特点:不调用不执行;
Java支持两种方式来调用方法,分为:a.有明确返回值的方法调用。b.没有明确返回值的方法调用;根据方法是否需要返回值来选择。
1.有明确返回值的方法调用:
a.单独调用,没有意义;没有输出结果;//用来调用无返回值(void)类型的方法
b.输出调用,有意义,但不够好,直接给出了结果,不能对结果进行操作;
c.赋值调用:有返回值类型的方法,推荐使用,可以对结果进一步操作;
三种调用实例:
单独调用
public class FunctionTest {
public static void main(String[] args) {
int a=10;
int b=20;
getSum(a,b); //单独调用,看不到结果
}
public static int getSum(int a,int b) {
//定义变量
int sum=a+b;
return sum; //返回和
}
}
输出调用
public class FunctionTest {
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println(sum(a,b)); //输出调用
}
public static int sum(int a,int b) {
//定义变量
int sum=a+b;
return sum; //返回和
}
}
赋值调用
public class FunctionTest {
public static void main(String[] args) {
int a=10;
int b=20;
int result=sum(a,b); //赋值调用
System.out.println("a与b的和为:"+result);
}
public static int sum(int a,int b) {
return a+b; //返回和
}
}
定义方法的注意事项
1.方法和方法是平级关系,一个方法中不能再定义方法.
2.定义一个方法的时候,形式参数必须有数据类型,否则报错.
3.在主main()中,调用方法的时候,实际参数中不需要带数据类型的.
4.有大括号的地方,不能有分号,有分号的地方不能有大括号.
2.无明确返回值的方法调用
其实就是void调用;
写一个输出阵列的方法:
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//获取要打印的行和列
System.out.println("请输入行");
int a=sc.nextInt();
System.out.println("请输入列");
int b=sc.nextInt();
xing(a,b); //采用单独调用
}
public static void xing(int a,int b) {
for(int x=1;x<=a;x++) { //行
for(int y=1;y<=b;y++) { //列
System.out.print("*");
}
System.out.println();
}
}
}
定义该方法时明确没有返回值,所以就需要采用void类型定义;
调用该方法时则就需要用到单独调用;
方法重载
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
方法重载特点:
方法名相同
方法的参数类型,个数顺序至少有一项不同
方法的返回类型可以不相同
方法的修饰符可以不相同
main方法也可以被重载
与返回值类型无关,只看方法名和参数列表
在调用时,虚拟机通过参数列表的不同来区分同名方法