成员方法-面向对象基础

时间:2023-02-26 18:00:54

1. 成员方法

1.1 基本介绍

在某些情况下,我们要需要定义成员方法(简称方法)。比如人类:除了有一些属性外( 年龄,姓名..),我们人类还有一 些行为比如:可以说话、跑步..,通过学习,还可以做算术题。这时就要用成员方法才能完成。

2 成员方法快速入门 201 202

现在要求对 Person 类完善。

1) 添加 speak 成员方法,输出 “我是一个好人”

2) 添加 cal01 成员方法,可以计算从 1+..+1000 的结果

3) 添加 cal02 成员方法,该方法可以接收一个数 n,计算从 1+..+n 的结果

4) 添加 getSum 成员方法,可以计算两个数的和

public class Test25
{
public static void main(String[] args)
{
//方法使用
//1. 方法写好后,如果不去调用(使用),不会输出
//2. 先创建对象 ,然后调用方法即可
Person p1 = new Person();//先创建对象
p1.speak();//调用speak方法
p1.cal01();//调用 cal01 方法
p1.cal02(5);//调用 cal02 方法,同时给 n = 5
p1.cal02(10);//调用 cal02 方法,同时给 n = 10
int returnRes = p1.getSum(10,20);//把 方法 getSum 返回的值,赋给 变量 returnRes
System.out.println("returnRes="+returnRes);
}
}
class Person
{
String name;
int age;
//方法(成员方法)
//解读
//public表示方法是公开的
//void表示方法没有返回值
//speak():speak表示方法名,()形参列表
//{}方法体,可以写我们的代码
//System.out.println("我是一个好人");表示我们的方法就是输出一句话
public void speak()
{
System.out.println("我是一个好人");
}

//2) 添加 cal01 成员方法,可以计算从 1+..+1000 的结果
public void cal01()
{
int ret =0;
for(int i=1;i<=1000;i++)
{
ret+=i;
}
System.out.println("计算结果:"+ret);
}

//3) 添加 cal02 成员方法,该方法可以接收一个数 n,计算从 1+..+n 的结果
/// (int n) 形参列表, 表示当前有一个形参 n, 可以接收用户输入
public void cal02(int n)
{
int ret =0;
for(int i=1;i<=n;i++)
{
ret+=i;
}
System.out.println("计算结果:"+ret);
}

//4) 添加 getSum 成员方法,可以计算两个数的和
//解读
//1. public 表示方法是公开的
//2. int :表示方法执行后,返回一个 int 值
//3. getSum 方法名
//4. (int num1, int num2) 形参列表,2 个形参,可以接收用户传入的两个数
//5. return res; 表示把 res 的值, 返回
public int getSum(int num1,int num2)
{
int ret = num1+num2;
return ret;
}
}

3. 方法的调用机制 203

3.1 图解

成员方法-面向对象基础

4. 成员方法的必要性

请遍历一个数组 , 输出数组的各个元素值。

4.1 传统方法

public class Test25
{
public static void main(String[] args)
{
int [][] map = {{0,0,1},{1,1,1},{1,1,3}};
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();
}

}
}

4.2 成员方法 204

4.2.1 成员方法的好处

1) 提高代码的复用性

2) 可以将实现的细节封装起来,然后供其他用户来调用即可

public class Test25
{
public static void main(String[] args)
{
int [][] map = {{0,0,1},{1,1,1},{1,1,3}};
myTools tool = new myTools();
tool.printArr(map);
}
}
//把输出的功能写到一个类中,然后调用即可
class myTools
{
//方法,接收二维数组
public void printArr(int[][] map)
{
for(int i=0;i<map.length;i++)
{
for(int j=0;j<map[i].length;j++)
{
System.out.print(map[i][j]+"\t");
}
System.out.println();
}
}
}

5. 成员方法的定义 205

访问修饰符(public) 返回数据类型 方法名(形参列表..) {//方法体

语句;

return 返回值;

}

1) 形参列表:表示成员方法输入 cal(int n) , getSum(int num1, int num2)

2) 返回数据类型:表示成员方法输出, void 表示没有返回值

3) 方法主体:表示为了实现某一功能代码块

4) return 语句不是必须的。

5) 结合前面的题示意图, 来理解

6. 成员方法的使用细节 206

6.1 访问修饰符

(作用是控制 方法使用的范围)

如果不写默认访问,[有四种: public, protected, 默认, private], 具体在后面说

6.2 返回数据类型

1) 一个方法最多有一个返回值 [思考,如何返回多个结果 返回数组 ]

2) 返回类型可以为任意类型,包含基本类型或引用类型(数组,对象)

3) 如果方法要求有返回数据类型,则方法体中最后的执行语句必须为 return 值; 而且要求返回值类型必须和 return 的 值类型一致或兼容

4) 如果方法是 void,则方法体中可以没有 return 语句,或者 只写 return ;

6.3 方法名

遵循驼峰命名法,最好见名知义,表达出该功能的意思即可, 比如 得到两个数的和 getSum, 开发中按照规范

6.4 形参列表 207

成员方法-面向对象基础

public class Test25
{
public static void main(String[] args)
{
AA a = new AA();//引用类
int[] res = a.getSumAndSub(1,4); //用数组来接收
System.out.println("差="+res[0]);
System.out.println("和="+res[1]);

//调用参数时,一定对应着参数列表传入相同类型或者兼容类型的参数
byte b1 = 1;
byte b2 = 2;
res = a.getSumAndSub(b1,b2);//byte->int //用数组来接收
//a.getSumAndSub(1.1,1.8);//错误 double->int
System.out.println("差="+res[0]);
System.out.println("和="+res[1]);
}
}
class AA
{
//一个方法最多有一个返回值 [思考,如何返回多个结果 返回数组 ]
public int[] getSumAndSub(int n1,int n2)
{
int[] resArr = new int[2];//创建一个数组
resArr[0] = n1-n2;
resArr[1] = n1+n2;
return resArr;//返回数组
}

//如果方法要求有返回数据类型,则方法体中最后的执行语句必须为 return 值;
//而且要求返回值类型必须和 return 的 值类型一致或兼容
public double f1()
{
double d1 = 1.1*3;
int n=100;
return n;//ok int->double
}

//如果方法是 void,则方法体中可以没有 return 语句,或者 只写 return ;
public void f2()
{
System.out.println("你好");
System.out.println("世界");
return ;
}
}