成员方法描述对象所具有的功能或操作,反映对象的行为,是具有某种相对独立功能的程序模块。
它与过去所说的子程序、函数等概念相当。
一个类或对象可以有多个成员方法,对象通过执行它的成员方法对传来的消息作出响应,完成特定的功能。
成员方法一旦定义,便可在不同的程序段中多次调用,故可增强程序结构的清晰度,提高编程效率。1 成员方法的分类 从成员方法的来源看,可将成员方法分为: 类库成员方法。这是由 Java 类库提供的,用户只要按照 Java 提供的调用格式去使用这些成员方法即可。
用户自定义的成员方法。这是为了解决用户的特定问题,由用户自己编写的成员方法。程序设计的主要工作就是编写用户自定义类、自定义成员方法。 从成员方法的形式看,可将成员方法分为: 无参数成员方法。
带参数成员方法。2 声明成员方法的格式 在 Java 程序中,成员方法的声明只能在类中进行,格式如下:[修饰符] 返回值的类型 成员方法名(形式参数表) throw [异常表]
{
// 说明部分
// 执行语句部分
}
成员方法的声明包括成员方法头和成员方法体两部分。 成员方法头确定成员方法的名字、形式参数的名字和类型、返回值的类型、访问限制和异常处理等;
成员方法体由包括在花括号内的说明部分和执行语句部分组成,它描述该方法功能的实现。 在成员方法头中: 修饰符。可以是公共访问控制符 public、私有访问控制符 private、保护访问控制符 protected 等访问权限修饰符,也可以是静态成员方法修饰符 static、最终成员方法修饰符 final、本地成员方法修饰符 native、抽象成员方法修饰符 abstract等非访问权限修饰符。访问权限修饰符指出满足什么条件时该成员方法可以被访问。非访问权限修饰符指明数据成员的使用方式。
返回值的类型。返回值的类型用 Java 允许的的各种数据类型关键字(int、float 等)指明成员方法完成其所定义的功能后,运算结果值的数据类型。若成员方法没有返回值,则在返回值的类型处应写上 void 关键字,以表明该方法无返回值。
成员方法名。是用户遵循标识符定义规则命名的标识符。
形式参数表。成员方法可分为带参成员方法和无参成员方法两种。对于无参成员方法来说则无形式参数表这一项,但成员方法名后的一对圆括号不可省略;对于带参成员方法来说,形式参数表指明调用该方法所需要的参数个数、参数的名字及其参数的数据类型,其格式为:(形式参数类型1 形式参数名1,形式参数类型2 形式参数名2,)
throw [异常表]。它指出当该方法遇到一些方法设计者未曾想到的问题时如何处理。3 方法体中的局部变量 在方法体内可以定义本方法所使用的变量,这种变量是局部变量,它的生存期与作用域是在本方法内。也就是说,局部变量只能在本方法内有效或可见,离开本方法则这些变量被自动释放。 方法体内定义变量时,变量前不能加修饰符。
局部变量在使用前必须明确赋值,否则编译时会出错。
在一个方法内部,可以在复合语句中定义变量,这些变量只在复合语句中有效,这种复合语句也被称为程序块。4 成员方法的返回值 若方法有返回值,则在方法体中用 return 语句指明要返回的值。 其格式为:return 表达式;
或return(表达式);
表达式可以是常量、变量、对象等。 return 语句后面表达式的数据类型必须与成员方法头中给出的“返回值的类型”一致。5 形式参数与实际参数 一般来说,可以通过以下方式来引用成员方法:成员方法名(实参列表)
在引用成员方法时应注意: 对于无参成员方法来说,是没有实际参数列表的,但方法名后的括弧不能省略。
对于带参数的成员方法来说,实参的个数、顺序以及它们的数据类型必须与形式参数的个数、顺序以及它们的数据类型保持一致,各个实参间用逗号分隔。实参名与形参名可以相同也可以不同。
实参也可以是表达式,此时一定要注意使表达式的数据类型与形参的数据类型相同,或者使表达式的类型按 Java 类型转换规则达到形参指明的数据类型。
实参变量对形参变量的数据传递是“值传递”,即只能由实参传递给形参,而不能由形参传递给实参。程序中执行到引用成员方法时,Java 把实参值拷贝到一个临时的存储区(栈)中,形参的任何修改都在栈中进行,当退出该成员方法时,Java 自动清除栈中的内容。6 成员方法的引用方式6.1 方法语句 成员方法作为一个独立的语句被引用。6.2 方法表达式 成员方法作为表达式中的一部分,通过表达式被引用。6.3 方法作为参数 一个成员方法作为另一个成员方法的参数被引用。更为典型的是,在递归的成员方法中,一个成员方法作为它自身的参数被引用。6.4 通过对象来引用 这里有两重含义,一是通过形如“对象名.方法名”的形式来引用对象,二是当一个对象作为成员方法的参数时,通过这个对象参数来引用对象的成员方法。7 引用成员方法时应注意的事项 当一个方法引用另一个方法时,这个被引用的方法必须是已经存在的方法。
另外,还要视被引用的成员方法存在于何处而做不同的处理。 如果被引用的方法存在于本文件中,而且是本类的方法,则可直接引用。
如果被引用的方法存在于本文件中,但不是本类的方法,则要考虑类的修饰符与方法的修饰符来决定是否能引用。
如果被引用的方法不是本文件的方法而是 Java 类库的方法,则必须在文件的开头处用 import 命令将引用有关库方法所需要的信息写入本文件中。
如果被引用的方法是用户在其他的文件中自己定义的方法,则必须通过加载用户包的方式来引用。8 成员方法的递归引用 成员方法的递归引用就是指在一个方法中直接或间接引用自身的情况。9 static 修饰的静态方法 用 static 修饰符修饰的方法被称为静态方法,它是属于整个类的类方法。
不用 static 修饰符限定的方法,是属于某个具体类对象的方法。 static 方法使用特点如下: static 方法是属于整个类的,它在内存中的代码段将随着类的定义而分配和装载。而非 static 的方法是属于某个对象的方法,当这个对象被创建时,在对象内存中拥有这个方法的专用代码段。
引用静态方法时,可以使用对象名做前缀,也可以使用类名做前缀。
static 方法只能访问 static 数据成员,不能访问非 static 数据成员,但非 static 方法可以访问 static 数据成员。
static 方法只能访问 static 方法,不能访问非 static 方法,但非 static 方法可以访问 static 方法。
main 方法是静态方法。在 Java 的每个 Application 程序中,都必须有且只有一个 main 方法,它是 Application 程序运行的入口点。10 数学函数类方法 Java 类库提供的实现常用数学函数运算的标准数学函数方法,这些方法都是 static 方法。 标准数学函数方法在 Java.lang.Math 类中,使用方法比较简单,格式如下:类名.数学函数方法名(实参列表)
11 final 修饰的最终方法 用 final 修饰符修饰的方法称为最终方法,如果某个方法被 final 修饰符所限定,则该类的子类就不能覆盖父类的方法,即不能再重新定义与此方法同名的自己的方法,而仅能使用从父类继承来的方法。
使用 final 修饰方法,就是为了给方法“上锁”,防止任何继承类修改此方法,保证了程序的安全性和正确性。 注意:final 修饰符也可用于修饰类,而当用 final 修饰符修饰类时,所有包含在 final 类中的方法,都自动成为 final 方法。12 native 修饰的本地方法 修饰符 native 修饰的方法称为本地方法,此方法使用的目的是为了将其他语言(如 C、C++、Fortran、汇编等)嵌入到 Java 语言中。
这样,Java 可以充分利用已经存在的其他语言的程序功能模块,避免重复编程。 在 Java 程序中使用 native 方法时应该特别注意平台问题。
由于 native 方法嵌入其他语言书写的模块是以非 Java 字节码的二进制代码形式嵌入 Java 程序的,而这种二进制代码通常只能运行在编译生成它的平台上,所以整个 Java 程序的跨平台性能将受到限制或破坏,除非 native 方法引入的代码也是跨平台的。