声明成员方法可以定义类的行为,行为表示一个对象能够做的事情或者能够从一个对象取得的信息。类的各种功能操作都是用方法来实现的,属性只不过提供了相应的数据。一个完整的方法通常包括方法名称、方法主体、方法参数和方法返回值类型。

成员方法一旦被定义,便可以在程序中多次调用,提高了编程效率。声明成员方法的语法格式如下:

public class Test {[public|private|protected][static]<void|return_type><method_name>([paramList]) {// 方法体}
}

注意:上述语法中,中括号“[]”中的部分表示可以省略,竖线“|”表示“或”,例如 public|private,说明可以使用 public 或 private 关键字,但是两个关键字不能同时出现。

上述代码中一个方法包含 4 部分:方法的返回值、方法名称、方法的参数和方法体。其中 retum_type 是方法返回值的数据类型,数据类型可以是原始的数据类型,即常用的 8 种数据类型,也可以是一个引用数据类型,如一个类、接口和数组等。

除了这些,一个方法还可以没有返回值,即返回类型为 void,像 main() 方法。method_name 表示自定义的方法名称,方法的名称首先要遵循标识符的命名约定,除此之外,方法的名称第一个单词的第一个字母是小写,第二单词的第一个字母是大写,依此类推。

paramList 表示参数列表,这些变量都要有自己的数据类型,可以是原始数据类型,也可以是复杂数据类型,一个方法主要依靠参数来传递消息。方法主体是方法中执行功能操作的语句。其他各修饰符的含义如下。

 public、private、protected:表示成员方法的访问权限。static:表示限定该成员方法为静态方法。final:表示限定该成员方法不能被重写或重载。abstract:表示限定该成员方法为抽象方法。抽象方法不提供具体的实现,并且所属类型必须为抽象类。

为学生类 Student 添加一个可以返回学生信息字符串的方法。代码如下:

public class Student {public StringBuffer printInfo(Student st) {StringBuffer sb = new StringBuffer();sb.append("学生姓名:"+st.Name+"\n 学生年龄:"+st.Age+"\n 学生性别:"+st.isSex());return sb;}
}

上述代码创建了一个名称为 printInfo 的方法,其返回值类型为 StringBuffer(引用数据类型)。该方法需要传递一个 Student 类型的参数,最后需要将一个 StringBuffer 类型的数据返回。
1. 成员方法的返回值
若方法有返回值,则在方法体中用 return 语句指明要返回的值,其格式如下所示。

return 表达式

或者

return (表达式)

其中,表达式可以是常量、变量、对象等。表达式的数据类型必须与声明成员方法时给出的返回值类型一致。
2. 形参、实参及成员方法的调用
一般来说,可以通过以下方式来调用成员方法:

methodName({paramList})

关于方法的参数,经常会提到形参与实参,形参是定义方法时参数列表中出现的参数,实参是调用方法时为方法传递的参数。

下面 retumMin() 方法中的 m 和 n 是形参,调用 retumMin() 方法时的 x 和 y 是实参。

public int returnMin(int m,int n) {return Math.min(m,n);    // m和n是形参
}
public static void main(String[] args) {int x = 50;int y = 100;Test t = new Test();int i = t.returnMin(x,y);    // x和y是实参System.out.println(i);
}

方法的形参和实参具有以下特点:

1 . 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在方法内部有效,方法调用结束返回主调方法后则不能再使用该形参变量。

2 . 实参可以是常量、变量、表达式、方法等,无论实参是何种类型的量,在进行方法调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值、输入等办法使实参获得确定值。

3 . 实参和形参在数量、类型和顺序上应严格一致,否则会发生“类型不匹配” 的错误。

4 . 方法调用中发生的数据传送是单向的,即只能把实参的值传送绐形参,而不能把形参的值反向地传送给实参。因此在方法调用过程中,形参的值发生改变,而实参中的值不会变化。

示例调用 add() 方法前后形参 x 的变化。

public int add(int x) {x += 30;System.out.println("形参 x 的值:"+x);return x;
}
public static void main(String[] args) {int x = 150;System.out.println("调用 add() 方法之前 x 的值:"+x);Test t = new Test();int i = t.add(x);System.out.println("实参 x 的值:"+x);System.out.println("调用 add() 方法的返回值:"+i);
}

运行上述程序,输出结果如下:

调用 add() 方法之前 x 的值:150
形参 x 的值:180
实参 x 的值:150
调用 add() 方法的返回值:180

从输出结果可以看出,形参 x 值的改变,并没有影响实参 x。

在调用成员方法时应注意以下 4 点:

1 . 对无参成员方法来说,是没有实际参数列表的(即没有 paramList),但方法名后的括号不能省略。

2 . 对带参数的成员方法来说,实参的个数、顺序以及它们的数据类型必须与形式参数的个数、顺序以及它们的数据类型保持一致,各个实参间用逗号分隔。实参名与形参名可以相同,也可以不同。

3 . 实参也可以是表达式,此时一定要注意使表达式的数据类型与形参的数据类型相同,或者使表达式的类型按 Java 类型转换规则达到形参指明的数据类型。

4 . 实参变量对形参变量的数据传递是“值传递”,即只能由实参传递给形参,而不能由形参传递给实参。程序中执行到调用成员方法时,Java 把实参值复制到一个临时的存储区(栈)中,形参的任何修改都在栈中进行,当退出该成员方法时,Java 自动清除栈中的内容。

3. 方法体中的局部变量
在方法体内可以定义本方法所使用的变量,这种变量是局部变量。它的生存期与作用域是在本方法内,也就是说,局部变量只能在本方法内有效或可见,离开本方法则这些变量将被自动释放。

在方法体内定义变量时,变量前不能加修饰符。局部变量在使用前必须明确赋值,否则编译时会出错。另外,在一个方法内部,可以在复合语句(把多个语句用括号{}括起来组成的一个语句称复合语句)中定义变量,这些变量只在复合语句中有效。

Java成员方法的声明和调用相关推荐

  1. 1.5 成员方法的声明和调用,形参,实参

    声明成员方法 声明成员方法可以定义类的行为,行为表示一个对象能够做的事情或者能够从一个对象取得的信息.类的各种功能操作都是用方法来实现的,属性只不过提供了相应的数据.一个完整的方法通常包括方法名称.方 ...

  2. Java成员方法getinfo_成员方法

    4.4 成 员 方 法 成员方法描述对象所具有的功能或操作,反映对象的行为, 是具有某种相对独立功能的程序模块.它与过去所说的子程序. 函数等概念相当.一个类或对象可以有多个成员方法,对象通过 执行它 ...

  3. java语言中声明布尔型_【Java初探02】——Java语言基础

    本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...

  4. java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...

    先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...

  5. jni c java互相调用_通过JNI实现Java和C++的相互调用

    评论 # re: 通过JNI实现Java和C++的相互调用 2008-07-29 14:14 Always BaNg. 不错,把字符转换也一并讲了吧,比如UTF-8的处理,USC-2与MBCS转换等. ...

  6. java调用el_[Java教程][javaEE] EL表达式调用java方法

    [Java教程][javaEE] EL表达式调用java方法 0 2016-07-03 18:00:03 1.新建个类,类里面定义静态方法 package com.tsh.utils;import j ...

  7. 《深入理解 Spring Cloud 与微服务构建》第八章 声明式调用 Feign

    ·# <深入理解 Spring Cloud 与微服务构建>第八章 声明式调用 Feign 文章目录 一.Feign 简介 1.简介 2.工作原理 二.写一个 Feign 客户端 三.Fei ...

  8. cocos2d-x 调用java_cocos2d-x中通过Jni实现Java与C++的互相调用

    cocos2d-x中通过Jni实现Java与C++的互相调用. cocos2d-x用开发者提供了一个类JniHelper,提供了java与c++之间互调的jni解决方案. 笔者所开发的"史上 ...

  9. JavaScript函数的声明以及调用(1)

    1.为什么需要函数 2.函数的声明和调用和java和c#差不多,复习java和C#笔记即可 3.函数形参实参匹配问题 4.return return后面的代码不会继续执行,所以说return不仅可以返 ...

最新文章

  1. 收藏 | 75道常见AI面试题助你清扫知识盲点(附解析)
  2. 刷算法的时候有没有必要自写测试用例?
  3. 【django轻量级框架】云端系统之Django框架
  4. Js中的style,currentStyle,getComputedStyle()区别
  5. JAVA并发之多线程基础(5)
  6. 非常复杂,上双11数据大屏背后的秘密:大规模流式增量计算及应用
  7. Windows环境下QWT安装及配置
  8. 数学--数论--费马小定理+求逆元
  9. “云栖直播”升级为“公开课”
  10. MYSQL 定时任务
  11. mysql数据迁移neo4j_neo4j数据库迁移---------Neo4j数据库导入导出的方法
  12. 计算机教育部学科评估2019,2019教育部8大学科评估公示名单,学科实力一眼较高低!...
  13. 美赛建模需要matlab吗,美赛(matlab自学)之微分方程建模
  14. html中在线预览pdf文件之pdf在线预览插件
  15. oracle仅部分记录建立索引的方法
  16. python判断中文函数_如何判断(或如何编写)一个没有副作用的python函数?
  17. 最小二乘支持向量机(LSSVM)详解
  18. 【每日随笔】2021 年终总结 ( 学习和博客 | 技术学习方向 | 专业学习方向 | 写博客的技巧总结 | 工作成果 | 2022 年展望及职业规划 | 对 CSDN 的建议和期望 )
  19. PHP中的PEAR是什么?
  20. 抢菜捡漏工具(PrintScreenCatchImg)

热门文章

  1. win10文件显示后缀名_Win10一开机,内存占用竟高达60%?你可以尝试这样做
  2. java可以返回微妙吗_Java开发中10个最为微妙的最佳编程实践
  3. jdbc odbc java mysql数据库连接_Java数据库连接之配置ODBC数据源
  4. python编的俄罗斯方块游戏_python编写俄罗斯方块
  5. text 两端对齐 小程序_leetcode 68 文本左右对齐
  6. 微信公众号url服务器在哪里,微信公众号url认证(服务器认证)
  7. markdown如何设置图片大小_不会吧,还不会用markdown排版吗
  8. UC浏览器怎么清除缓存
  9. 腾讯视频安卓版下载_腾讯课堂上传课程视频
  10. 浏览器tab标签显示网站标志图标