一、 场景
实例代码
class Hello {
public static void main(String args){
for(int i=0;i<30;i++){
System.out.print("-");
}
System.out.println();
System.out.println("登鹳雀楼");
for(int i=0;i<30;i++){
System.out.print("-");
}
System.out.println();
System.out.println("白日依山尽");
for(int i=0;i<30;i++){
System.out.print("-");
}
System.out.println();
System.out.println("黄河入海流");
for(int i=0;i<30;i++){
System.out.print("-");
}
System.out.println();
System.out.println("欲穷千里目");
for(int i=0;i<30;i++){
System.out.print("-");
}
System.out.println();
System.out.println("更上一层楼");
for(int i=0;i<30;i++){
System.out.print("-");
}
System.out.println();
}
}
上面代码的问题:
1.代码冗余:程序中存在大量重复的代码,
2.可维护性不好
3.程序的可扩展性不是太好
二、 函数概念
实现特定功能的一段代码,可以反复使用,减少冗余代码,提高程序可重用性与可维护性
三、 定义的位置
定义在类内部,Class对应的括号中,不能进行嵌套定义,和main函数是同级关系,
四、 语法
public static void 函数名(){ 函数体 }
函数名命名规则:首字符小写,后面每个单词首字符大写,见名知意
函数体:功能代码的具体实现。
五、函数的使用
(一) 使用的语法
方法名();
案例:
public class Test{
public static void main(String[] args){
function1(); //直接在调用处使用函数名()的方式进行调用
}
public static void funciton1(){
System.out.println("Hello World");
}
}
(二) 函数的执行流程
java正常执行是按照代码的顺序从上往下执行,但是调用到方法时,会跳转的函数对应的函数体中,当方法执行完毕后,会返回函数调用出,继续往下执行。
public class FunctionTest1{
public static void main(String[] args){
System.out.println("我准备调用函数了。。。。");
funciton1();
System.out.println("函数调用完毕。。。。");
}
public static void funciton1(){
System.out.println("funciton1()函数开始执行。。");
System.out.println("funciton1()函数执行完毕。。");
}
}
六、参数
-
作用:函数在完成功能过程中需要外部提供数据时,使用参数明确诉求,接收数据。
-
场景代码分析:
public class FunctionTest2{
public static void main(String[] args){
eat1();
}
public static void eat1(){
System.out.println("吃东西");
}
}
//上面函数调用会输出 吃东西 ,限制我们要修改以下需求,需求如下,
//将吃东西的内容,用参数传递到函数中,
public class FunctionTest2{
public static void main(String[] args){
eat1();
eat2("饺子"); //我们通过调用有参方法,将数据传递到对应方法中,
}
public static void eat1(){
System.out.println("吃东西");
}
public static void eat2(String food){
System.out.println("吃"+food);
}
}
(一) 参数
九、函数的三要素
注意:在设计函数时,需要根据需求选择是否添加参数,是否设计返回值,不是所有的函数都要有参数与返回值。
-
概念:定义在函数中的一种特殊的局部变量,表示函数向使用者索要的数据,可以是多种或多个
-
形参语法:
定义参数语法: 参数类型 参数名,如果有多个中间用,隔开 pubilc static void 函数名(参数类型 参数名1,参数类型 参数名2...){ }
- 实参列表:调用函数时的参数表,内部定义的参数称为实参(实际参数),满足函数诉求实际有值的数据
-
public class FunctionTest2{ public static void main(String[] args){ eat1(); eat2("饺子"); //我们通过调用有参方法,将数据传递到对应方法中, eat3("张三","饺子"); } public static void eat1(){ System.out.println("吃东西"); } public static void eat2(String food){ System.out.println("吃"+food); } public static void eat3(String name,String food){ System.out.println(name+"喜欢吃"+food); } public static void eat4(String name,int number,String food){ System.out.println(name+"吃了"+number+"个"+food); } }
七、返回值类型与返回值
-
返回值类型
作用:约束函数可以返回的数据类型,可以使用任何已知类型,
void:表示该方法没有返回值
例:
// 返回值类型为int public static int sum(int a,int b){ }
-
return 关键字
作用:将于返回值类型对应的结果返回给调用者,在调用位置生成结果;也可以用于流程控制语句,当函数遇到return时会跳出函数。
语法:
return; //用户返回值类型为void类型的函数中,控制函数的执行流程 return 数据(返回值); //用于在返回值类型不是void类型函数中,将数据(结果)返回到函数调用位置
返回值
概念:通过return语句返回的结果,也是函数执行的结果,最终会生成在调用函数的位置。
例:调用者接收函数返回值
//功能使用者(用户)获取结果 public static void main(String[]args){ //方式1:直接使用 System.out.println( sum(102,200) ); //方式2:使用变量接收再使用 int r = sum(102,200); System.out.println( r ); } public static int sum(int a , int b){ int result = a + b;//计算结果 return result;//返回计算结果 }
-
注意:
-
1. 函数遇到return语句会立即返回 2. 在非void函数中,务必保证至少有一个return语句能够正确执行(条件分之、循环语句中的return不一定执行)
八、函数的设计
-
函数是功能提供者,需要我们站在提供者(服务者)的角度取思考和设计
-
设计步骤
1. 根据需求先定义函数名(功能名称) 2. 定义一个最简单的函数(无参、无返回值) 3. 根据需求思考是否需要使用者提供数据,是否需要接收数据,如果需要,为函数添加对应的参数 4. 根据需求思考是否需要返回结果给使用者,如果需要,为函数添加返回值类型与返回值
-
函数的重要组成部分
1. 函数名:函数的标识,定义时需满足标识符语法规范,调用函数时需要指定函数名。 2. 参数表:定义参数的位置,标识该函数对调用者的诉求,调用者必须传入与参数相同的数据,才能使用 3. 返回值类型:约束函数可以返回什么类型的数据给调用者
-
完整的函数声明语法
public 返回值类型 函数名(参数列表){ 函数体 }
十、函数的分类
-
根据返回值类型,参数列表进行分类
1. 无参无返回值(无条件、无结果)例:打印10个HelloWorld/打印1~100的和 2. 有参无返回值(有条件、无结果)例:打印n的阶乘/打印n的所有因子 3. 无参有返回值(无条件、有结果)例:返回1~100的和/返回50的所有因子和 4. 有参有返回值(有条件、有结果)例:返回a与b的和/返回n的所有因子和
-
函数的基本执行流程
当函数被调用时,实参为形参赋值,程序执行函数中的代码 执行完毕后,可以返回结果到函数的位置,接收返回值,继续向下执行其他代码。