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 ;
}
}