【java面向对象编程】第二弹----成员方法
笔上得来终觉浅,绝知此事要躬行
🔥 个人主页:星云爱编程
🔥 所属专栏:javase
🌷追光的人,终会万丈光芒
🎉欢迎大家点赞👍评论📝收藏⭐文章
目录
一、成员方法
1.1、基本介绍
1.2、简单使用
1.3、方法的调用机制原理:
1.4、成员方法的好处
1.5、成员方法的定义
1.6.注意事项及使用细节
二、成员方法传参机制
2.1、基本数据类型的传参机制
2.2引用数据类型的传参机制
一、成员方法
1.1、基本介绍
在某些情况下,我们需要定义成员方法(简称方法)。比如人类:除了有一些属性外(年龄,姓名..),还有一些行为比如:可以说话、跑步...这时就要用成员方法才能完成。和c语言中的函数类似。
1.2、简单使用
public class Test{
public static void main(String[]args){Person p1=new Person();p1.name="星云";p1.eat();}
}class Person{String name;int age;public void eat(){System.out.println(name+"吃饭");}
}
运行上述代码可以看到控制台打印了:星云吃饭
那么该方法是怎么调用执行的呢?请看下文。
1.3、方法的调用机制原理:
为了方便理解,我们在Person类中添加一个方法:
public int Add(int num1,int num2){return num1+num2;}
现在再来运行下面的代码:
public class Test {public static void main(String[] args) {Person p1=new Person();int ret=p1.Add(10,20);System.out.println(ret);}
}
其调用机制如下图:
方法调用小结:
(1)当程序执行到方法时,就会开辟一个独立的空间,也就是栈空间;
(2)当方法执行完毕,或者执行到return语句时,就会返回
(3)返回到调用方法的地方
(4)返回后,继续执行方法后面的代码
(5)当main方法(栈)执行完毕,整个程序退出
1.4、成员方法的好处
(1)提高代码的复用性。
(2)可以将实现的细节封装起来,然后供其他用户来调用即可。
1.5、成员方法的定义
访问修饰符 返回数据类型 方法名(形参列表..){//方法主体语句;return返回值;}
(1)形参列表:表示成员方法输入Add(int num1,int num2)。
(2)返回数据类型:表示成员方法输出,void表示没有返回值。
(3)方法主体:表示为了实现某一功能代码块。
(4)return语句不是必须的。返回类型为void型时可省略return语句。
1.6.注意事项及使用细节
(1)调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数.
(2)实参和形参的类型要一致或兼容、个数、顺序必须一致。
(3)方法不能嵌套定义。
(4)一个方法最多有一个返回值。(若是要同时返回多个值,可以用数组)
(5)返回类型可以为任意类型,包含基本类型或引用类型(数组,对象)。
(6)如果方法要求有返回数据类型,则方法体中最后的执行语句必须为 return 值; 而且要求返回值类型必须和return的值类型一致或兼容。
(7)如果方法返回类型是void,则方法体中可以没有return语句,或者只写 return。
方法名:
遵循驼峰命名法,最好见名知义,表达出该功能的意思即可, 比如 得到两个数的和 getSum。
形参列表:
(1)一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开。
(2)参数类型可以为任意类型,基本数据类型和引用类型都。
(3)调用带参数方法时,传入的参数一定要对应参数列表中参数的类型或兼容类型的参数。
(4)方法定义时的参数称为形式参数,简称形参;方法调用时传入的参数称为实际参数,简称实参。实参和形参的类型必须相同或兼容,顺序和个数必须一致。
方法调用细节:
(1)在同一个类中调用方法:直接调用。
(2)不同类中调用方法:
若方法为静态方法,通过类名直接调用;
若方法为非静态方法,需要通过创建对象,用对象名调用。
二、成员方法传参机制
2.1、基本数据类型的传参机制
看如下代码:实现两个数的交换
public class Test3 {public static void main(String[] args) {C c = new C();int a=23;int b=65;System.out.println("交换前:a="+a+" b="+b);c.swap(a,b);System.out.println("交换后:a="+a+" b="+b);}
}class C{public void swap(int a, int b){int tem=a;a=b;b=tem;System.out.println("swap中"+"a="+a+" b="+b);}
}
当我们用上面这个方法去实现交换两个数时,会发现并没有做到数值交换。
结论:形参为基本数据类型时,传递的是值(值拷贝),形参的任何改变都不影响实参。
2.2引用数据类型的传参机制
请看如下代码:
public class Test4 {public static void main(String[] args) {B b = new B();int[]arr={1,2,3};System.out.print("交换前:");b.print(arr);b.test11(arr);System.out.print("交换后:");b.print(arr);}
}class B{public void test11(int[]arr){arr[0]=666;arr[1]=777;}public void print(int[]arr){for(int i=0;i<arr.length;i++){System.out.print(arr[i]+" ");}System.out.println();}
}
运行后可以看到,arr数组中元素改变了
结论:引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!
2.3小测试
在评论区输出下面代码运行后的结果
public class Test5 {public static void main(String[] args) {Dog dog = new Dog();dog.name="大白";dog.age=10;System.out.println("处理前:main中dog.age="+dog.age);dog.test22(dog);//dog.test33(dog);System.out.println("处理后:main中dog.age="+dog.age);}
}class Dog{String name;int age;public void test22(Dog dog){dog=null;}public void test33(Dog dog){dog=new Dog();dog.name="小黄";dog.age=99;}
}