成员方法
基本介绍
-
在某些情况下,我们要需要定义成员方法(简称方法), 比如人类除了有一些属性外(年龄,
姓名 ),我们人类还有一些行为比如:可以说话、跑步,通过学习,还可以做算术题。这时就
要用成员方法才能完成。现在要求对Person类完善。
Method01.java
-
添加speak成损方法,输出我是一只好人
-
添加cal01成员方法,可以计算从1+.+1000的结果
-
添加ca02成员方法,该方法可以接收一个数n,计算从1+.+n的结果
-
添加getSuml成员方法,可以计算两个数的和
public class Method01 {
//编写一个main方法
public static void main(String[] args) {
//方法的使用
//6.方法写好之后如果不去调用的话,不会生效方法里的内容
//7.先创建对象,然后再去调用其方法即可
Person02 p1 = new Person02();
p1.speak();
//创建对象之后,就会找Person类中的speak方法,找到之后就去使用
p1.cal01();
p1.cal02(5);
//调用cal02方法同时给n一个5的赋值
int returnRes = p1.getSum(50,20);
//调用getSum方法, 同时给num1 num2赋值
//方法返回的值赋值给returnRes
System.out.println("getSum方法返回的值="+returnRes);
}
}
class Person02{
String name;
int age;
//方法(成员方法)
//添加speak成员方法, 输出"我是一个好人"
//1.public表示方法公开
//2.void表示方法无返回值
//3.speak()方法名称 ()形参列表目前为空
//4.{}内部叫做方法体, 可以写我们要执行的代码,或者相关的功能
public void speak(){
System.out.println("我是一个好人");
//5.表示我们的方法就是输出一段字符串
}
//添加cal01成员方法 可以计算从 1+...1000的计算结果
public void cal01(){
int res = 0;
for (int i=0;i<=1000;i++){
res += i;
}
System.out.println("计算结果:"+res);
//输出循环的结果
}
//添加cal02方法,该方法可以接收一个数n,计算从1+n的结果
//1.这里的(int n)为形参列表,表示当前有一个形参n,可以接收到用户的输入
public void cal02(int n){
int res = 0;
for (int i=0;i<=n;i++){
//这里的唯一变化就是,可以按照输入的次数完成循环
res += i;
}
System.out.println("cal02的计算结果:"+res);
//输出循环的结果
}
//添加getSum成员方法,可以计算两个数的和
//1.public表示方法是公开的
//2.int 表示方法执行之后 ,返回一个int值
//3.getSum 方法名
//4.(int num1,int num2)形参列表 ,2个形参 ,可以接收用户传入的两个数
//5.return res return表示将res的值, 返回
public int getSum(int num1,int num2){
int res = num1 + num2;
return res;
}
}
方法调用小结 :
-
当程序执行到方法时,就会开辟一个独立 的空间(栈空间)
-
当方法执行完毕,或者执行到return语句 时,就会返回
-
返回到调用方法的地方
-
返回之后继续执行方法后面的代码
-
当main方法(栈)执行完毕之后 ,整个程序退出
成员方法的必要性
·为什么需要成员方法 ?
-
√看一个需求:
请遍历一个数组,输出数组的各个元素值。
int [][]map = {(0,1,1),(1,1,1),(1,1,3)};
public class Method02 {
public static void main(String[] args) {
//请遍历一个数组,输出数组的各个元素值。
int [][] map = {{0,0,1},{1,1,1},{1,1,3}};
//遍历map
//传统的解决方法就是直接遍历
for (int i =0; i < map.length; i++){
for (int j= 0;j < map[i].length;j++){
System.out.print(map[i][j]+" ");
}
System.out.println();
//每次遍历数组之后换行
}
}
}
可以发现使用这样的方式确实可以实现对于代码的遍历
但是如果要求是让你多遍历几次 的话就要写很多次代码
public class Method02 {
public static void main(String[] args) {
//请遍历一个数组,输出数组的各个元素值。
int [][] map = {{0,0,1},{1,1,1},{1,1,3}};
//使用方法完成输出
Mytools tool = new Mytools();
tool.printArr(map);
//这里就将数组传入到形参
tool.printArr(map);
tool.printArr(map);
//实现三次
}
}
//把输出的功能 ,写到一个类的方法中 ,然后调用这个方法即可
class Mytools {
//方法,接收一个二维数组
public void printArr(int[][] map) {
System.out.println("==============");
//对传入的map数组进行遍历输出
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
}
}
使用这样的办法 ,就可以是实现对遍历多次 ,而不是写多次代码
成员方法的好处
-
提高代码的复用性
-
可以将实现的细节封装起来,然后供其他用户来调用即可。
成员方法的定义
public 返回数据类型 方法名(参数列表..){
• //方法体语句;
• return返回值;
}
//这里的public就是一种访问修饰符
-
形参列表:表示成员方法输入cal(intn) ,getSum(int num1 ,int num2)
-
数据类型(返回类型):表示成员方法输出,void表示没有返回值
-
方法主体:表示为了实现某一功能代码块
-
return语句不是必须的。(例如void)
·注意事项和使用细节
MethodDetail.java
访问修饰符(作用是控制方法使用的范围)
如果不写访问修饰符就是默认访问 ,[四种 : public , protected ,默认(也就是不写) ,private]
---返回数据类型
-
一个方法最多只能有一个返回值 [思考,如何返回多个结果? 可以使用数组的方式返回]
-
返回类型可以为任意类型,包含基本类型或引用类型(数组,对象)
-
如果方法要求有返回数据类型,则方法体中最后的执行语句必须为return值;而 且要求返回值类型必须和return的值类型一致或兼容
-
如果方法是void,则方法体中可以没有return语句,或者只写return:
-
遵循驼峰命名法,最好见名知义,表达出该功能的意思即可,比如得到两个数的和 getSum ,开发中按照规范命名
形参列表
-
一个方法可以有0个参数,也可以有多个参数,中间用逗号开,比如 getSum (int n1, int n2)
-
参数类型可以为任意类型,包含基本类型或引用类型,比如
printArr(int[][]map) -
调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数!【getSum】
例如 需要传入的类型为int 我们可以传入byte ,byte类型会自动转换为int类型 ,这就是兼容类型
但是兼容支支持向上兼容 ,不支持向下兼容 ,例如传入double的高精度参数
-
方法定义时的参数称为形式参数,简称形参;方法调用时的参数称为实际参数,简称实参,实 参和形参的类型要一致或兼容、个数、顺序必须一致![演示]
-
方法体里面写完成功能的具体的语句,可以为输入、输出、变量、运算、分支、循环、方法调用,但里 面不能再定义方法!即:方法不能嵌套定义。
public void f4(){
pubilc void f5(){
}
}
//此时就会报错,非法的表达式的开始!
√方法调用细节说明
-
同一个类中的方法调用:直接调用即可。比如print(参数): 案演示:A类sayok调用print()
-
跨类中的方法A类调用B类方法:需要通过对象名调用。比如对象名方法名(参 数):案例演示:B类sayHello调用print()
-
特别说明一下:跨类的方法调用和方法的访问修饰符相关,先暂时这么提一下,

浙公网安备 33010602011771号