方法
java方法是语句的集合,完成一个特定的功能,相当于c中的函数。
- 方法是解决一类问题的步骤的有序组合
- 方法包含在类或对象中
- 方法被创建,在其他地方使用
一个方法只完成一个功能,有利于后期的扩展和改进。
优点:
- 使程序变得更简洁,清晰,提高可读性
- 有利于后期维护
- 提高代码重用性
- 提高开发效率
方法的定义
修饰符 返回值类型 方法名 (参数类型 参数名){
. . .
方法体
. . .
return 返回值;
}
方法包含一个方法头和一个方法体。
- 修饰符:修饰符,可选,告诉编译器如何调用该方法,定义了该方法的访问类型。
- 返回值类型:方法可能会返回值,return ValueType是方法返回的数据类型。有些方法执行操作,也许没有返回值,此时返回值类型是void。
- 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
- 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参 数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
- 形式参数:在方法被调用时用来接收实际数据。
- 实参:调用方法时,传给方法的数据。
- 方法体:方法包含的功能块,定义该方法实现的功能。
[演示]
public static int max(int num1,int num2){
return num1 > num2 ? num1 : num2 ;
}
方法的调用
两种调用方式,根据是否有返回值来确定。
-
无返回值(void),例如:
System.out.println("Hello");
-
有返回值,例如:
int larger = max(198,168);
[演示:方法的定义及调用]
public class item{
public static void main(String[] args){
int num1=198;
int num2=168;
int larger = max(num1,num2);
System.out.println("max is "+larger);
}
public static int max(int num1,int num2){
return num1>num2?num1:num2;
}
}
这个程序包含 main 方法和 max 方法。main 方法是被 JVM 调用的,除此之外,main 方法和其它方法 没什么区别。JAVA中只有值传递!
main 方法的头部是不变的,如例子所示,带修饰符 public 和 static,返回 void 类型值,方法名字是 main,此外带个一个 String[] 类型参数。String[] 表明参数是字符串数组。
非静态方法
- 没有使用static修饰符修饰的方法,就是非静态方法。
- 调用这种方法的时候,是“一定”要使用对象的。因为非静态方法是属于对象的。(非静态属性也是一样的)
[实例]
public class Student{
public void go(){}
}
public class static main(){
Student s = new Student();
s.go();
}
静态方法
- 使用static修饰符修饰的方法,就是静态方法。
- 调用这种方法的时候,“可以”使用对象调用,也“可以”使用类来调用,但是推荐使用类进行调用,因为静态方法是属于类的。(静态属性(变量)也是一样的)
[例子]
public class Student{
public static void go(){}
}
public class static main(){
Student.go();
}
方法的重载
上面是两个整型的最大值,如果想要找出两个浮点型的最大值就要用到方法的重载,就是创建另一个相同名字,但参数不同的方法。
public static double max(double num1,double num2){ //double形参
return num1>num2?num1:num2;
}
public static int max(int num1,int num2){ //int形参
return num1>num2?num1:num2;
}
你调用那个max方法,取决于你传的实参。是int型就调用第二个max方法,是double浮点型,就调用第一个方法。这就叫做方法的重载。
- 就是说一个类的两个方法拥有相同的名字,但是有不同的参数列表。
- Java编译器根据方法签名判断哪个方法应该被调用。
- 方法重载可以让程序更清晰易读。执行密切相关任务的方法应该使用相同的名字。
- 重载的方法必须拥有不同的参数列表。你不能仅仅依据修饰符或者返回类型的不同来重载方法。
可变参数
jdk 1.5开始,java支持传递同类型的可变参数给一个方法。
声明方法如下:
typeName... parameterName
声明时,在指定的参数类型后面加一个省略号(…)。
一个方法只能有一个可变参数,且可变参数必须作为方法的最后一个参数。任何普通的参数必须在它之前声明。
public class item{
public static void main(String[] args){
printMax(168,198,888,9898,1698); //调用方法
}
public static void printMax(int... numbers){ //可变参数的应用
if(numbers.length==0){
System.out.println("No number");
return ;
}
int max=numbers[0];
for(int i=1;i<numbers.length;i++){ //查找最大值
if(max<numbers[i])
max=numbers[i];
}
System.out.println("Max is "+max);
return ;
}
}
递归
A方法调用其他方法,我们很容易理解。
而递归就是:A方法调用A方法,自己调用自己。我们在设计递归方法时,一定要设计一个出口,就是什么时候不调用自己,否则就是一个死循环。
递归结构包括两个部分:
- 递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环
- 递归体。解答:什么时候需要调用自身方法
[演示]
public static int fun(int num){ //计算num的阶乘
if(num==1)
return num;
else
return fun(num-1)*num;
}