Java课堂6
函数的定义
概念:实现特定功能的一段代码,可反复使用。
定义语法:
public static void 函数名称{
//函数体
}
经验:将需要在多个位置重复使用的一组代码,定义在函数体内。
package demo;
public class Test1{public static void main(String[] args){System.out.println("好好学习");printline();System.out.println("天天向上");printline();System.out.println("dood good study");printline(); System.out.println("day day up"); }public static void printline(){for(int i=1;i<=30;i++){System.out.print("=");}System.out.println();}
}
定义的位置
函数定义在类的内部,与main函数并列。
//位置1
public class Test{
//位置2
public static void main(String[] args){
//位置3
}
//位置4
}
//位置5
正确的使用位置:位置2、位置4
函数的调用
先执行函数内部代码,结束后,返回到函数调用处,继续执行。
函数的参数
参数:调用函数时传入的数据
型参与实参
定义语法:
public static void 函数名称(形式参数){
// 函数主体
}
调用语法:
函数名称(实际参数);
自定义函数里的public static void printline(int n,String x)里面的int n,String x是形参
函数调用里面的printline(30,"*");里面的30,"*"是实参
package demo;
public class Test2{public static void main(String[] args){printline(30,"*");System.out.println("好好学习");printline(30,"+");System.out.println("天天向上");printline(25,"-");System.out.println("dood good study");printline(40,"~"); System.out.println("day day up");printline(10,"="); }public static void printline(int n,String x){for(int i=1;i<=n;i++){System.out.print(x);}System.out.println();}
}
返回值与返回类型
定义语法:
public static 返回值类型 函数名称(形式参数列表){
//函数主体
return value;//返回值
}
调用语法:
变量= 函数名称;
注:返回值有类型用return
package demo;
public class Test4{public static void main(String[] args){int r=add(100,10);if(r%2==0){System.out.println(r+"是偶数");}else{System.out.println(r+"是奇数");}}public static int add(int n,int m){int sum=n+m;return sum;}
}
return关键字
return的两种用法:
应用在具有返回值的类型中:
return value:表示结束当前函数,并伴有返回值。返回到函数调用处。
应用在没有返回值类型中(void)的函数中:
return:表示结束当前函数,直接返回到函数调用处。
package demo;
public class Test4{public static void main(String[] args){int r=add(100,10);if(r%2==0){System.out.println(r+"是偶数");}else{System.out.println(r+"是奇数");}}public static int add(int n,int m){int sum=n+m;return sum;}
}
总结
注意:一个类型中可以定义多个函数,函数之间属于并列关系,不可嵌套。
经验:一个函数只做一件事情
好处:1.减少代码冗余
2.提高复用性
3.提高可读性
4.提高可维护性
5.方便分工合作
嵌套调用
在一个被调用的函数中又调用了其他的函数
package demo;
public class Test5{public static void main(String[] args){System.out.println("main..start..1");m1();System.out.println("main..end..2");}public static void m1(){System.out.println("main..start..3");m2();System.out.println("main..end..4");}public static void m2(){System.out.println("main..start..5");System.out.println("main..end..6");}
}
无穷递归
在一个函数中调用了自身
package demo;
public class Test5{public static void main(String[] args){m1();}public static void m1(){System.out.println("m1..start");m1();System.out.println("m1..end");}
}
无穷无尽的执行m1.start...最终内存耗尽,出错。
递归
package demo;
public class Test6{public static void main(String[] args){System.out.println(jc(7));}public static int jc(int n){if(n==1){return 1;}return n*jc(n-1);}
}
用递归解决的问题都可以用循环解决,在解决复杂问题时,使用递归方法解决更为简单。