java中的方法就是一个代码片段,类似于C语言里的函数
基本语法:
// 方法定义
public static 方法返回值 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
}
// 方法调用
返回值变量 = 方法名称(实参...);
注意事项:
1.方法定义时可以没有参数。每个参数要指定类型
2.方法定义必须在类中
3.java里没有“函数声明“的概念,方法的代码写在调用位置的上方或下方都可以
java里方法的重载和C++里函数的重载是类似的,目的都是为了避免给同一功能的方法(或函数)起很多名字
例如:
class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = add(a, b); //两整数求和
System.out.println("ret = " + ret);
double a2 = 10.5;
double b2 = 20.5;
double ret2 = add(a2, b2); //两小数求和
System.out.println("ret2 = " + ret2);
}
public static int add(int x, int y) {
return x + y;
}
}
传递参数的类型不同,就不能调用现有add方法,所以要写成下面这样
class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = addInt(a, b);
System.out.println("ret = " + ret);
double a2 = 10.5;
double b2 = 20.5;
double ret2 = addDouble(a2, b2);
System.out.println("ret2 = " + ret2);
}
public static int addInt(int x, int y) {
//参数为整型时的方法addInt
return x + y;
}
public static double addDouble(double x, double y) {
//参数为浮点型时的方法addDouble
return x + y;
}
}
这样的代码是正确的,但两方法的功能是相同的,相同功能调用时写不同的方法名,在java里显得不友好,所以不如都叫add
class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = add(a, b);
System.out.println("ret = " + ret);
double a2 = 10.5;
double b2 = 20.5;
double ret2 = add(a2, b2);
System.out.println("ret2 = " + ret2);
double a3 = 10.5;
double b3 = 20.5;
double c3= 30.5;
double ret3 = addDouble(a3, b3,c3);
System.out.println("ret3 = " + ret3);
}
public static int addI(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
public static double add(double x, double y, double z) {
return x + y + z;
}
}
方法的名字都叫 add。有的 add 是计算 int 相加, 有的是 double 相加; 有的计算两个数字相加, 有的是计算三个数字相加,这就是方法的重载
总结一下重载的规则:
1、方法名相同
2、参数列表不同
3、返回值类型不做要求
一个方法在执行过程中调用自身, 就称为 “递归”
递归求N的阶乘
public static void main(String[] args) {
int n = 5;
int ret = factor(n);
System.out.println("ret = " + ret);
}
public static int factor(int n) {
if (n == 1) {
return 1;
}
return n * factor(n - 1); // factor 调用函数自身
}
递归按顺序打印数字的每一位(例如:123 打印 1 2 3)
public static void main(String[] args){
System.out.println(print(123));
}
public static print(int num){
if (num > 9) {
print(num / 10);
}
System.out.println(num % 10);
}
递归求斐波那契数
public static void main(String[] args){
System.out println(Feibona(5));
}
public static int feibona(int n){
if(n==1||n==2)
{
return 1;
}
return feibona(n-1)+feibona(n-2);
}
递归求青蛙跳台阶(特殊的斐波那契数)
public static void main(String[] args){
System.out.println(forg(5));
}
public static int forg(int n){
if(n==1)
{
return 1;
}
if(n==2)
{
return 2;
}
return forg(n-1)+forg(n-2);
}
有些问题可以用递归解决,也可以用非递归(循环)解决