1.1方法的概念


Java 的方法( Method )类似于其它语言的函数 ( Function ) ,指一段可以直接被另一段程


序或代码引用的程序或代码。


一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。所有的


高级语言中都有子程序这个概念,用子程序实现模块的功能。


面向过程语言中,整个程序就是由函数(相互调用)组成的


面向对象语言中,方法(函数)是类的组成部份,整个程序是由很多类组成的


通俗讲,方法就是解决某件事情的办法,比如 我要上班,可以选择 步行,骑车,开车,


公共交通,而每一个方式,在程序中就可能是一个方法。



1.2方法的组成要素


方法的组成要素:修饰符 返回值 方法名 参数 方法体 五个要素




1.3方法的补充说明



方法的优点:



1. 使程序变得更简短清晰



2. 有利于程序的维护(修改)



3. 可以提高开发效率



4. 可以提高代码的重用性



方法名的命名规则:



1. 方法名必须以字母 下画线 $ 数字组成



2. 不能以数字开头



3. 方法名尽量由单词组成,如果有多个单词,第一个单词首字母小写,其它单词首字母大写



4. 在同一个类中,方法名一般不能重名(方法重载除外)




1.4 方法的声明



语法


访问权限修饰符 其它修饰符 返回值类型 方法名(参数列表) 
    { 
 
   
方法体代码 
 
   
return  
    返回值 
    ; 
    (如果返回值类型为  
    void  
    此行可省略) 
 
   
}
 
   
// 
    示例 
 
   
public static  
    void  
    print 
    (){ 
 
   
System 
    . 
    out 
    . 
    println 
    ( 
    " 
    我是打印方法 
    " 
    ); 
 
   
//return; 
    因为返回值类型为  
    void  
    所以此行可省略 
 
   
}


1. 访问权限修饰符: public , default 【如果没有添加任何的访问权限修饰符,则默认为



default ,而 default 不需要显式的写出来】,目前使用的访问权限修饰符都和 main 方法保



持一致,使用 public



2. 其它修饰符:可以是 static final abstract 等等 也可以没有,在讲面向对象前我们



都用 static



3. 返回值类型:如果有返回值,需要用返回值的类型代替,如果没有返回值 需要用 void 代





4. 方法名:符合方法名的命名规则情况下,根据方法的功能,自行定义,最好能见名知义(看



到名字就能明白方法的功能)



5. 参数列表:如果方法所实现的功能中有未知项参与运算,就可以将未知项设置为参数



实际参数:实参,在方法外面定义,表示实际参与运算的值或者变量,作用为了给



形参进行赋值



形式参数:形参,在方法中定义,用于接收实参的值,相当于是一个未被赋值的变





形参数据类型 形参变量名称



形参 = 实参;



6. 大括号:方法的实现,里面写方法的功能代码



7. return : 将当前方法运行之后的结果进行返回,返回给当前方法的调用者。如果方法声



明为 void 可省略,否则返回实际类型的变量



注意 1 :方法声明(并实现)仅仅是声明了这个方法,方法中的代码不会被执行的



注意 2 :方法声明的位置为类的内部,其它方法的外部




1.5方法的调用



调用语法:


方法名称 ( 实参列表 );



// 示例 :



print ();



注意:



a . 实参的数量和类型必须和形参保持完全的一致,实现书写的顺序也必须和形参中的顺序保持



完全一致



b . 方法之间只能进行相互的调用,而不能在方法中声明方法,就目前而言声明的方法都和



main 方法是并列的



c . 定义方法的时候,运算的结果会返回给调用者【在哪个方法中调用,运算的结果返回给哪个



方法】



d . 方法只有声明,没有调用 . 对当前程序没有任何作用,白写了 .



e . 方法没有声明,直接调用就会报错,不允许 .



f . 方法声明的位置为类的内部,其它方法外部的任何位置 , 没有顺序要求



g . 同一个类中,方法名不能冲突(不能名字相同,只有方法重载情况除外)



h . 方法中声明的变量都为局部变量。在哪个方法中声明的变量,就只能在哪个方法中使用,在



方法外不能直接访问到



i . 如果方法没有返回值,则方法调用相当于执行了某个功能,但没有直接结果返回给调用者,



如果方法有返回值,则相当于执行了某个功能,并获得了一个结果(变量),对调用者而言,



相当于接收了一个变量




1.6方法的参数



a. 形参,就是方法声明中的参数,在方法调用前为没有赋值的变量



b. 实参 , 方法调用时,写在方法名后面小括号中的变量或常量


c. 方法被调用时,用实参给形参赋值,这个过程叫传参



d. 传参时需要注意的事项:实参的数量和类型必须和形参的数量和类型保持一致【相兼容的数



据类型】




1,7



1. 在没有返回值的方法中使用 return 语句 , 要求 return 单独成立一条语句,类似于 break 或



者 continue ,后面不能跟任何的数值,直接跟一个分号,此时 return 语句作用为 结束整个



方法的运行。



2. 在有返回值的方法中使用 return 语句,要求 return 后加加空格后跟着需要返回的变量和



结尾的分号,此时 return 语句作用为 结束整个方法的运行,并将返回的变量传给方法的调用



者 . 要求 返回值的实际变量类型需要与方法声明的返回值类型保持一致。



3. 如果方法声明中有返回值,在方法体中使用了选择语句,如果需要有不同情况下的返回结



果,那就都需要写 return 语句



4. 无论在方法体的任何位置出现 return 语句,本次方法的调用都立即结束,返回到调用者。




1.8方法的重载



什么是方法的重载



定义:同一个类中,方法名字相同,参数列表不同,就叫方法重载



说明:



1. 参数列表的不同包括,参数个数不同,参数数据类型不同,参数顺序不同



2. 方法的重载与方法的修饰符和返回值没有任何关系



就是同一个功能的方法,因为参数的不同,调用的具体的方法也不同。



如何判定多个方法是否是重载的?衡量标准,要同时满足以下三条:



A :必须同一个类中。



B :方法名称必须一致。



C :参数列表必须不同。(顺序,个数,类型)



和 static , public ,返回值, void等等都没有关系。

优点:



1 、简化了开发的压力



2 、简化了记忆的压力



3 、调用方法更方便,更简洁,又满足了不同的情况



基本原理:



当方法名称一致时,通过形式参数列表的不同来选择要执行的方法。




1.9方法的递归



定义:在一个方法内,调用方法本身,称为方法的递归 ( 注意和重载的区别 )



说明:方法递归包含了一种隐式的循环,会重复执行某段代码,但是这种重复不需要使用循环



语句来进行控制



练习 1 :使用递归计算 1 到数字 n 的和


public class  
             recursionDemo 
 
            
{ 
 
            
// 
             计算  
             1 
             到数字 
             n 
             的和 
 
            
public static  
             int  
             sum 
             ( 
             int  
             n 
             ){ 
 
            
// 
             数字 
             1 
             的和为 
             1 
             ,直接返回 
 
            
if 
             ( 
             n  
             ==  
             1 
             ){ 
 
            
return  
             1 
             ;  
             
}
 
             
// 
              数字 
              2 
              及以上的数字和为 当前数字本身加上它前面所有数字的和 
 
             
return  
              sum 
              ( 
              n 
              - 
              1 
              ) 
              + 
              n 
              ; 
 
             
}
 
             
练习2:使用递归计算 
              1+2+3+...+100 
              的和 
 
             
public static  
              void  
              main 
              ( 
              String 
              []  
              args 
              ) 
 
             
{ 
 
             
int  
              number  
              =  
              5 
              ; 
 
             
int  
              sum  
              =  
              sum 
              ( 
              number 
              ); 
 
             
System 
              . 
              out 
              . 
              println 
              ( 
              " 
              数字 
              1 
              到 
              "  
              +  
              number 
              + 
              " 
              的和为 
              :"  
              +  
              sum 
              ); 
 
             
} 
 
             
} 
 
             
public static  
               int  
               sum 
               ( 
               int  
               num 
               ) { 
 
              
if  
               ( 
               num  
               ==  
               1 
               ) { 
 
              
return  
               1 
               ; 
 
              
}
 
              
return  
               num  
               +  
               sum 
               ( 
               num  
               -  
               1 
               ); 
 
              
} 
 
              
使用递归输出 
               30 
               位的斐波那契数列
 
              
public static  
                int  
                getFibonacci 
                ( 
                int  
                index 
                ) { 
 
               
if  
                ( 
                index  
                ==  
                1  
                ||  
                index  
                ==  
                2 
                ) { 
 
               
return  
                1 
                ; 
 
               
}
 
               
return  
                getFibonacci 
                ( 
                index  
                -  
                1 
                )  
                +  
                getFibonacci 
                ( 
                index  
                -  
                2 
                ); 
 
               
}