Java方法(二十二)
所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块。
一般情况下,定义一个方法的语法格式为:
访问修饰符 返回值类型 方法名(参数列表) {
方法体
}
其中:
- 访问修饰符:方法允许被访问的权限范围,可以是public、protected、private甚至可以省略,其中public表示该方法可以被其他任何代码调用。
- 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为void;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用return语句返回值。
- 方法名:定义的方法的名字,必须使用合法的标识符。
- 参数列表:传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开。
例如:
public class HelloJava { //定义了一个方法名为 print 的方法,实现输出信息功能 public void print() { System.out.println("Hello Java"); } public static void main(String[] args){ //在 main 方法中调用 print 方法 HelloJava test=new HelloJava(); test.print(); } }
运行结果:
Hello Java
根据方法是否带参、是否带返回值,可将方法分为四类:
无参无返回值方法
无参带返回值方法
带参无返回值方法
带参带返回值方法
无参无返回值方法的使用:
如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法。
方法的使用分两步:
1)定义方法
例如:下面的代码中,定义了一个方法名为show,没有参数,且没有返回值的方法,执行的操作为输出“love u three thousand times”。
注意:
- 方法体放在一对大括号中,实现特定的操作。
- 方法名主要在调用这个方法时使用,需要注意命名的规范,一般采用第一个单词首字母小写,其它单词首字母大写的形式。
2)调用方法
当需要调用方法执行某个操作时,可以先创建类的对象,然后通过 对象名.方法名(); 来实现。
例如:下面的代码中,创建了一个名为hello的对象,然后通过调用该对象的 show() 方法输出信息。
public class HelloJava { public static void main(String[] args) { HelloJava hello = new HelloJava();//创建对象,对象名为hello hello.show();//通过 对象名.方法() 的形式调用方法 } public void show() {//定义方法 System.out.println("love u three thousand times"); } }
运行结果:
love u three thousand times
无参带返回值方法的使用:
如果方法不包含参数,但有返回值,我们称为无参带返回值的方法。
例如:下面的代码中,定义了一个方法名为calSum,无参数,但返回值为int类型的方法,执行的操作为计算两数之和,并返回结果。
在calSum() 方法中,返回值类型为int类型,因此在方法体中必须使用return返回一个整数值。
调用带返回值的方法时需要注意,由于方法执行后会返回一个结果,因此在调用带返回值方法时一般都会接收其返回值并进行处理。如:
public class HelloJava { public static void main(String[] args) { //创建对象,对象名为hello HelloJava hello = new HelloJava(); //调用方法并接收方法的返回值,保存在变量sum中 int sum = hello.calSum(); System.out.println("两数之和为:"+sum); } //定义无参带返回值的方法 public int calSum() { int a=5; int b=12; int sum=a+b; return sum; } }
运行结果:
两数之和为:17
public class HelloJava { public static void main(String[] args) { // 创建名为hello的对象 HelloJava hello = new HelloJava(); // 调用hello对象的calcAvg()方法,并将返回值保存在变量avg中 double avg = hello.calcAvg(); System.out.println("平均成绩为:" + avg); } // 定义一个返回值为double类型的方法 public double calcAvg() { double java = 92.5; double php = 83.0; double avg = (java + php) / 2; // 计算平均值 // 使用return返回值 return avg; } }
运行结果:
平均成绩为:87.75
注意:
1)如果方法的返回类型为void,则方法中不能使用return返回值。
2)方法的返回值最多只能有一个,不能返回多个值。
3)方法返回值的类型必须兼容。例如:如果返回值类型为int,则不能返回String型值。
如:定义一个无参带返回值的方法,实现输出学生年龄的最大值。
public class HelloJava { //完成 main 方法 public static void main(String[] args) { // 创建对象,对象名为hello HelloJava hello = new HelloJava(); // 调用方法并将返回值保存在变量中 int maxScore = hello.getMaxAge(); // 输出最大年龄 System.out.println("最大年龄为:" + maxScore); } /* * 功能:输出学生年龄的最大值 * 定义一个无参的方法,返回值为年龄的最大值 * 参考步骤: * 1、定义一个整形数组 ages ,保存学生年龄,数组元素依次为 18 ,23 ,21 ,19 ,25 ,29 ,17 * 2、定义一个整形变量 max ,保存学生最大年龄,初始时假定数组中的第一个元素为最大值 * 3、使用 for 循环遍历数组中的元素,并与假定的最大值比较,如果比假定的最大值要大,则替换当前的最大值 * 4、使用 return 返回最大值 */ public int getMaxAge() { int[] ages={18,23,21,19,25,29,17}; int max=ages[0];//假定数组中的第一个元素为最大值 for (int i=0;i<ages.length;i++) { if (ages[i]>max) { max=ages[i]; } } return max; } }
带参无返回值方法的使用:
有时方法的执行需要依赖于某些条件。换句话说,要想通过方法完成特定的功能,需要为其提供额外的信息才行。
例如:现实生活中电饭锅可以实现“煮饭”的功能,但前提是我们必须提供食材,如果我们什么都不提供,那就真是的“巧妇难为无米之炊”了。
我们可以通过在方法中加入参数列表接收外部传入的数据信息,参数可以是任意的基本类型数据或引用类型数据。
如:
上面的代码定义了一个show方法,带有一个参数name ,实现输出消息。
调用带参方法与调用无参方法的语法类似,但在调用时必须传入实际的参数值。
对象名.方法名(实参1,实参2,......,实参n);
例如:
运行结果:
hello,Annie!
public class HelloJava { public static void main(String[] args) { // 创建对象,对象名为hello HelloJava hello = new HelloJava(); // 调用方法,传入两门课程的成绩 hello.calAvg(94, 81); } /* * 功能:计算两门课程考试成绩的平均分并输出平均分 * 定义一个包含两个参数的方法,用来传入两门课程的成绩 */ public void calAvg(double score1,double score2) { double avg = (score1+score2)/2; System.out.println("平均分:"+avg); } }
运行结果:
平均分:87.0
很多时候,我们把定义方法时的参数称为形参,目的是用来定义方法需要传入的参数的个数和类型;把调用方法时的参数称为实参,是传递给方法真正被处理的值。
注意:
1)调用带参方法时,必须保证实参的数量、类型、顺序与形参一一对应。如:
2)调用方法时,实参不需要指定数据类型。如:
3)方法的参数可以是基本数据类型,如:int、double等;也可以是引用数据类型,如:String、数组等。
import java.util.Arrays; public class HelloJava { public static void main(String[] args) { HelloJava hello = new HelloJava(); int[] scores= {84,91,74,62}; hello.print(scores);//实参为整型数组 } public void print(int[] scores) {//参数为整型数组 System.out.println(Arrays.toString(scores)); //使用Arrays类的toString()方法将数组转换为字符串并输出 } }
4) 当方法参数有多个时,多个参数间以逗号分隔。
带参带返回值方法的使用:
如果方法既包含参数,又带有返回值,我们称为带参带返回值的方法。
例如:下面的代码中,定义了一个show方法,带有一个参数name,方法执行后返回一个String类型的结果。
调用带参带返回值的方法:
public class HelloJava { public static void main(String[] args) { //创建对象,对象名为hello HelloJava hello = new HelloJava(); //调用带参带返回值的方法,将返回值保存在变量hi中 String hi = hello.show("Annie"); System.out.println(hi); } private String show(String name) { return "hello,"+name+"!"; } }
运行结果:
hello,Annie!
import java.util.Arrays; public class HelloJava { public static void main(String[] args) { HelloJava hello=new HelloJava(); int[] scores={79,52,98,81}; //调用方法,传入成绩数组,并获取成绩的个数 int count=hello.sort(scores); System.out.println("共有"+count+"个成绩信息!"); } /* * 功能:将考试成绩排序并输出,返回成绩的个数 * 定义一个包含整型数组参数的方法,传入成绩数组 * 使用Arrays类对成绩数组进行排序并输出 * 方法执行后返回数组中元素的个数 */ public int sort( int[] scores ){ Arrays.sort(scores); System.out.println(Arrays.toString(scores)); //返回数组中元素的个数 return scores.length; } }
运行结果:
[52, 79, 81, 98]
共有4个成绩信息!
方法的重载
如果同一个类中包含了两个或两个以上方法名相同,方法参数的个数、顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了。
如:下面4个方法名称都为show,但方法的参数有所不同,因此都属于方法的重载。
当调用被重载的方法时,Java会根据参数的个数和类型来判断应该调用哪个重载方法,参数完全匹配的方法将被执行。
如:
public class HelloJava { public static void main(String[] args) { HelloJava hello=new HelloJava(); hello.show();//调用无参的show方法 hello.show("tom");//调用带有一个字符串参数的show方法 hello.show("jack",20);//调用带有字符串参数和整型参数的show方法 } public void show() { System.out.println("hello"); } public void show(String name) { System.out.println("hello,"+name); } public void show(String name,int age) { System.out.println("hello,"+name); System.out.println("age:"+age); } public void show(int age,String name) { System.out.println("hello,"+name); System.out.println("age:"+age); } }
运行结果:
hello
hello,tom
hello,jack
age:20
判断方法重载的依据:
1)必须是在同一个类中
2)方法名相同
3)方法参数的个数、顺序或类型不同
4)与方法的修饰符或返回值没有关系