函数(方法)的定义:
定义的位置:
定义第一个函数:
在需要执行函数代码的位置,通过函数名称进行调用。
函数的调用:函数名();
注意:调用函数时,会优先执行函数内部代码,结束后,返回到函数调用处,继续向下执行。
public class TestFunction{
public static void main(String[]args){
System.out.println("床前明月光");
printSign(); //函数调用
System.out.println("疑是地上霜");
printSign();
System.out.println("举头望明月");
printSign();
System.out.println("低头思故乡");
printSign();
}
//定义:打印图形(1行10个减号)
public static void printSign(){
for(int i =1;i<=10;i++){
System.out.print("-");
}
System.out.println();
}
}
函数的参数:
形参与实参:
1.定义语法:
public static void 函数名称(形式参数){ //局部变量的声明
}
2.调用语法:
函数名称(实际参数); //为形式参数赋值
public class TestFunction2{
public static void main(String[]args){
System.out.println("床前明月光");
printSign(5); //函数调用
System.out.println("疑是地上霜");
printSign(10);
System.out.println("举头望明月");
printSign(15);
System.out.println("低头思故乡");
printSign(20);
}
//打印图形, 定义形式参数
public static void printSign(int count){
for(int i =1;i<=count;i++){
System.out.print("-");
}
System.out.println();
}
}
单个参数
多个参数
public class TestFunction2{
public static void main(String[]args){
System.out.println("床前明月光");
printSign(5,'#'); //函数调用
System.out.println("疑是地上霜");
printSign(10,'$');
System.out.println("举头望明月");
printSign(15,'@');
System.out.println("低头思故乡");
printSign(20,'*');
}
//打印图形, 定义形式参数
public static void printSign(int count, char sign){
for(int i =1;i<=count;i++){
System.out.print(sign);
}
System.out.println();
}
}
补充:
1. == 比较的是地址,不是内容,当比较字符串时,==不够准确。
2.比较字符串时,应使用 s1.equals(s2),可准确的比较字符串内容。
3.当比较两个字符串不相同时,可使用 !s1.equals(s2) 。!(逻辑运算符:非)代表“不等”。
返回值与返回值类型
函数调用时,一些情况下无需返回结果;另外一些情况下则必须返回结果。
例如:存款操作无需返回结果;取款操作必须返回结果。
定义语法:
public class TestReturnVlue{
public static void main(String[]args){
//调用add 需要获得一个结果,参与到后续的运算中
int result = add(10,20);
System.out.println("add函数的返回值:"+ result); //结果:30
//二次运算
System.out.println(result + 50);
}
public static int add(int a,int b){
System.out.println("---add executed---");
int sum = a + b;
return sum;
}
}
return关键字
return的两种用法:
1.应用在具有返回值类型的函数中:
return value;//表示结束当前函数,并伴有返回值;返回到函数调用处。(有具体的返回值类型)
2.应用在没有返回值类型(void)的函数中:
return;//表示结束当前函数,直接返回到函数调用处。(返回值是void)
注意:break是跳出循环,return是跳出整个函数。
注意事项:
注意:一个类中可以定义多个函数,函数之间属于并列关系,不可嵌套。
经验:一个函数只做一件事。
好处:减少代码冗余。提高复用性。提高可读性。提高可维护性。方便分工合作。
多级调用
无穷递归
递归
实际开发中,递归可以解决具有既定规律的特定问题。
注意:
所有能以递归解决的问题,循环都可以解决。当解决复杂问题时,递归的实现方式更为简单。
何时使用递归?
当需要解决的问题可以拆分成若干个小问题,大小问题的解决方法相同。
有固定规律,函数中自己调用自己。
如何正确使用递归?
设置有效的出口条件,避免无穷递归。
递归阶乘
public class TestGetSum{
public static void main(String[]args){
int result = factorial(5);
System.out.println(result);
//5的阶乘
}
public static int factorial(int n ){ //n = 5
if(n==1){ //增加出口条件,n=1时,无需计算阶乘,直接返回结果1。
return 1;
}
return n * factorial(n -1);
}
}
总结:
函数(方法)是什么?
一种语法结构,它可以把一段代码封装成一个功能,以便重复调用。
方法格式的注意点
方法的修饰符:暂时都使用public static 修饰。
方法申明了具体的返回值类型,内部必须使用return返回对应类型的数据。
形参列表可以有多个,甚至可以没有;如果有多个形参,多个形参必须使用 “,” 隔开,且不能给初始化值。
方法的其他写法
方法定义时:返回值类型、形参列表可以按照需求进行过填写。
注意事项
1.如果方法不需要返回结果,返回值类型必须申明成void(无返回值),此时方法内部不可以使用return返回数据。
2.方法如果没有参数,或者返回值类型申明为void可以称为无参数、无返回值的方法,依次类推。
public class MethodDemo1{
public static void main(String[] args){
//目标:学会方法定义的其他形式,并理解其流程
print();
System.out.println("-------------");
print();
}
/**
无参数返回值的方法
*/
public static void print(){
for(int i = 0 ;i<3;i++){
System.out.println("Hello World");
}
}
}
方法的常见问题
- 方法的编写顺序无所谓。
- 方法与方法之间是平级关系,不能嵌套定义。
- 方法的返回值类型为void(无返回值),方法内则不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部则必须使用return返回对应类型的数据。
- return语句下面,不能编写代码,因为永远执行不到,属于无效的代码。
- 方法不调用就不执行,调用时必须严格匹配方法的参数情况。
- 有返回值的方法调用时可以选择定义变量接受结果,或者直接输出调用,甚至直接调用;无返回值方法的调用只能直接调用一下。