黑马程序员Java笔记——方法篇

----------- android培训java培训、java学习型技术博客、期待与您交流! ---------

方法

关键词:方法头、方法体、参数列表、定义方法、调用方法、方法重载、封装、模块化、方法抽象、逐步求精

一、引述:

方法是什么:为了完成一个特定的操作而组合在一起的语句组。在面向对象编程中称为方法,在面向过程编程中叫做函数。

方法的作用:使得编程开发模块化,易读、易调试、易维护、和易复用。

二、简述:

(1)定义方法:指定方法中的各项信息,而进行的操作。

定义方法的语法:

修饰符 返回值类型 方法名(参数列表){

方法体

}

修饰符:是用于限定类型以及类型成员的申明的一种符号。按功能可分为三部分:存取修饰符,类修饰符和成员修饰符。由Java关键字充当。

返回值类型:一些方法的结果是一个返回值,这些数值的类型依自身所占内存大小从数据类型中选取,对带有返回值的方法来讲 return语句是必须的

但是,还有一些方法没有具体的返回值,只是为了完成某种操作,这是需用关键字void(空)在返回值类型的位置上标明。void方法不需要return语句,但是可以使用return关键词。(关键词return能用于终止方法并返回到方法的调用者,这对改变void方法中正常的流程控制还是很有用的) 

带有返回值类型的方法,称之为返回值方法;没有返回值的方法,叫void方法。

方法名:即方法的名字。命名习惯:使用小写字母命名,如果一个名字中含有多个单词,就把它们连在一起,第一个单词的首字母小写,以后每个单词的首字母大写 ——驼峰法则。

参数列表:指明方法中参数的类型、顺序、个数。

可变参数列表(JDK1.5开始支持):可以把类型相同但是个数可变的参数传递给方法。

可变参数列表声明语法:typeName ...parameterName (类型名…参数名)

可变参数列表细节:

1)适用情景:适用于参数个数不确定,类型确定的情况

2)语法:可变参数位于参数最后一项;...位于变量类型和变量名之间,

(3)可变参数的特点:

 当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数

② ...位于变量类型和变量名之间,前后有无空格都可以

③ 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数

组形式访问可变参数。

方法体:是包含指定的要执行动作的语句集合。

方法头是指:方法的修饰符、返回值类型、方法名、和方法的参数。

方法签名:方法名 和方法的 参数列表 的统称。

关于参数:定义在方法头中的变量称为形式参数,或者简称为形参。当调用方法时给方法传递的变量称为实际参数,或者简称为实参。参数是可选的,可以定义不含参数的方法。

为什么叫定义方法而不叫声明方法呢?

定义是指被定义的条目是什么,而声明通常是指为被声明的条目分配相应的内存空间来存储数据。因此我们常说:定义方法,声明变量。

(2)调用方法:通过调用语句,可以实现方法体中定义的功能操作。

如果方法返回一个值,对方法的处理通常是把它当做一个值来处理。

如果方法返回void,对方法的调用通常是一条语句,结尾记得添加分号 ;表示结束

如果调用其他类的方法,对方法的调用是: 类名.方法名。

提醒:

Java中带返回值的方法,也可以当做语句来调用。

调用方法是的程序运行流程:当程序调用一个方法时,程序控制就转移到被调用的方法。当执行问return语句或执行到表示方法结束的右括号时,被调用的方法将程序控制还给调用者。

每当调用一个方法时,系统都会将参数、局部变量(在方法内部声明的变量)存储在内存中的一个区域:栈,栈是一种先存后取,后进先出的方式存取数据。当一个方法调用另一个方法时,调用者的栈空间保持不变,栈会新开辟一块空间处理新调用的方法。当这个方法结束返回到调用者时,其相应的内存空间也被释放。

main方法:为了运行某个类,该类必须含有名为main的方法。main方法也叫主方法是程序的入口,程序是从main方法开始执行的。main方法中的语句可以调用main方法所在类的其他方法(静态的),也可调用其他类中定义的方法(可以是非静态的)。main方法和其他方法的不同之处是它由JVM直接调用。

main方法的方法头永远都是一样的:public static void main(String[ ] args){ }

权限修饰符:public;静态修饰符:static;返回值类型:void

方法名:main 参数列表:String[ ] args

String[ ]:表明参数类型是一个字符串数组。

(3)参数值的传递:调用方法是需要向方法中提供要操作的实参。

参数顺序匹配:实参必须与方法签名中所对应的形参次序相同。

实参必须与方法签名中的参数在次序和数量上匹配,在类型上兼容。类型兼容是指:不需要经过显示的类型转换,实参的值就可以传递给形参。

(4)模块化代码:把不同功能的代码封装成不同的方法模块。

使用模块化代码开发可以减少冗余代码,避免程序臃肿;提高了可读性和复用性;便于程序的维护和调试;提供程序开发的效率和质量。

(5)重载方法:在一个类中有两个方法,它们有相同的名字,但是不同的参数列表。

方法重载的运行机制由Java编译器根据实参的数据类型对照方法签名选择用哪一个方法。但是,当一个方法有两个或者更多的匹配是,编译器无法判段哪个是最精确的匹配。称作歧义调用,歧义调用会产生一个编译错误。

注意:被重载的方法必须是以不同的参数列表来判定,不能基于不同的修饰符或者返回值来重载方法

(6)变量的作用域:是指一个变量可以在程序中引用的范围。

局部变量:在方法中声明的变量;局部变量的作用域:从声明变量的地方开始,到包含该变量的语句块结束为止。局部变量必须在使用之前进行声明和赋值。

成员变量:在类中声明的变量,成员变量的作用域:从声明变量的地方开始,到包含该变量的类块结束为止,涵盖了整个类。

参数实际就是一个局部变量,一个方法的参数的作用域涵盖了整个方法。

for循环头部初始化动作部分声明的变量,其作用域就是整个for循环。但是在for循环体内声明的变量,其作用域是从它声明的地方开始,到包含该变量的块结束为止。

可以在一个方法的不同块中声明同名的局部变量,但是不能在嵌套块中或者同一块中两次声明同一个局部变量。

(7)方法抽象:把方法的使用和方法的实现相剥离,即只知道该方法的功能而不知道方法如何实现的情况下调用该方法。

封装:将方法实现的细节封闭在方法内,对用户来说细节是隐藏的,只了解最终的功能。

我对方法抽象的理解:我吃了一个鸡蛋,我只需要知道这个鸡蛋能为我提供蛋白质,实现补充营养的功能就行。我并不需要知道,一只鸡如何下的蛋:

家鸡要生成一个完整的蛋大约需要24小时。输卵管分为5部分:伞部、蛋白分泌部(壶腹部)、峡部、子宫、阴道伞部呈漏斗状,边缘薄形成皱褶。鸡卵细胞在此停留15-18分钟并完成受精作用。蛋白分泌部管壁厚,粘膜形成纵褶,有腺体分泌浓蛋白包在卵黄外边,卵旋转下行在两端形成由浓蛋白扭成的系带(卵带)。鸡卵细胞在此停留3小时。峡部管腔较窄,腺细胞分泌物形成内外壳膜。鸡卵在此停留75分钟。子宫为输卵管膨大部分,粘膜形成深褶,肌肉层发达。卵细胞在此吸收水分形成稀蛋白,壳腺分泌含钙化合物形成硬壳。产蛋前4-5h子宫壁色素细胞分泌色素涂于壳表面,形成各种色斑。鸡蛋在此停留18-20h。阴道为输卵管末端,开口泄殖腔左侧。至此,鸡蛋总是以较细的一端在前移动,但是在其产出之前半小时,它会急速翻转,所以在产蛋时,鸡蛋是粗端先产出来的)——《蛋鸡养殖技术》

(8)程序设计模式:自顶而下;自下而上;逐步求精,以终为始;

依照方法抽象的思想,我们可以把一个大的需求分解成若干问题或者步骤,可能这些问题或者步骤还会再分解成更小的子问题或者小步骤;

我们让一个问题对应一个方法,决定哪些模块要用方法实现,而哪些模块要结合在另一个方法中。然后设计出完整的结构流程图。

自顶而下:从上往下每次实现结构流程图中的一个方法;自下而上:从下往上每次实现结构流程图中的一个方法。其中,未实现的方法用待完善的方法(提供简单但是不完整的功能)来暂时代替,然后再逐步实现细节。

你可能感兴趣的:(笔记,Java笔记)