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