1.基本介绍
比如人类:除了有一些属性外( 年龄,姓名..),我们人类还有一些行为比如:可以说话、跑步..,通过学习,还可以做算术题。这时就要用成员方法才能完成。
speak()为说话的成员方法
public void speak() {
System.out.println("我是一个好人");
}
-
public 表示方法是公开
-
void : 表示方法没有返回值
-
speak() : speak 是方法名, () 形参列表
-
{} 方法体,可以写我们要执行的代码
-
System.out.println("我是一个好人"); 表示我们的方法就是输出一句话
调用方法为Person p1 = new Peson();
p1.speak();
cal()为从1加到n的成员方法
public void cal(int n) {
//循环完成
int res = 0;
for(int i = 1; i <= n; i++) {
res += i;
}
System.out.println("cal 方法 计算结果=" + res);
}
-
(int n) 形参列表, 表示当前有一个形参 n, 可以接收用户输入
调用方法为 p1.cal(5); //给n赋值为5;
getSum()为两个数值相加的成员方法
public int getSum(int num1, int num2) {
int res = num1 + num2;
return res;
}
-
int :表示方法执行后,返回一个 int 值
-
(int num1, int num2) 形参列表,2 个形参,可以接收用户传入的两个数
-
return res; 表示把 res 的值, 返回
调用方法为 int returnRes = p1.getSum(5,8); //将5和8相加,将结果赋给returnRes;
2.方法的调用机制
以getSum()方法为例
当方法返回数据后,会销毁独立空间(栈空间)
3.成员方法的必要性
当需求需要多次调用时,传统方法可以解决但是代码冗余太高,使用成员方法调用可以提高代码复用性,供其余用户调用,减少代码冗余。
eg:输出数组
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(mapi + "\t");
}
System.out.println();
}
使用成员方法
MyTools tool = new MyTools(); //实例化对象
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(mapi + "_");
}
System.out.println();
}
}
}
4.成员方法的定义
访问修饰符 返回数据类型 方法名(形参列表..) {//方法体
语句;
return 返回值;
}
-
形参列表:表示成员方法输入
-
返回数据类型:表示成员方法输出, void 表示没有返回值
-
方法主体:表示为了实现某一功能代码块(语句)
-
return 有返回数据类型就要有返回内容(语句不是必须的)
5.注意事项
-
访问修饰符 (作用是控制 方法使用的范围)
如果不写默认访问,[有四种: public, protected, 默认, private], 具体在后面说
-
返回数据类型
-
一个方法最多有一个返回值(返回多个结果 返回数组 eg: int[])
public class mode5 { public static void main(String[] args){ AA aa = new AA(); int[] res = aa.getSunAndSub(4,2); System.out.println("和为" + res[0]); System.out.println("差为" + res[1]); } } class AA{ public int[] getSunAndSub(int n1,int n2){ int[] resArr = new int[2]; resArr[0] = n1+n2; resArr[1] = n1-n2; return resArr; } }
-
返回类型可以为任意类型,包含基本类型或引用类型(数组,对象)
3.如果方法要求有返回数据类型,则方法体中最后的执行语句必须为 return 值; 而且要求返回值类型必须和 return 的值类型一致或兼容
public int BB(){
}
上述代码将会报错,因为有返回数据类型,必须有返回值,
-
如果方法是 void,则方法体中可以没有 return 语句,或者 只写 return ;
public void BB(){
return;
}
-
方法名
遵循驼峰命名法,最好见名知义,表达出该功能的意思即可(方法名需要有一定的含义)
-
形参列表
-
一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开;
-
参数类型可以为任意类型,包含基本类型或引用类型;(int [] [] map)
-
调用带参数的方法,一定对应着参数列表传入的相同类型或兼容类型的参数;(兼容类型是可以进行自动转换的类型)
-
方法定义时的参数称为形式参数,简称形参;方法调用时的传入参数称为实际参数,简称实参;实参和形参的类型要一致或兼容、个数、顺序必须一致
-
方法体
里面完成功能的具体语句,可以为输入、输出、变量、运算、分支、循环、方法调用,但是不能再定义方法(方法不能嵌套定义)
-
方法调用
-
同一类中的方法调用:直接调用
public class mode6 { public static void main(String[] args){ A a = new A(); a.say(); } } class A{ public void print(int n){ System.out.println("调用了print()"+ n); } public void say(){ print(6); } }
2.方法A类调用B类方法:需要通过对象名调用
public void m1(){ B b = new B(); b.h1(); } class B{ public void h1(){ System.out.println("调用h1"); } }
3.跨类的方法调用与方法的访问修饰符有关
6.成员方法的传参机制
基本数据类型,传递的是值,形参的改变不影响实参
引用数据类型(数组、对象),传递的是地址,可以通过形参改变实参