当前位置: 首页 > news >正文

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


http://www.mrgr.cn/news/80814.html

相关文章:

  • 在 Unity 6 中使用APV为您的世界创建全局照明的新方法(一)
  • PugiXML,一个高效且简单的 C++ XML 解析库!
  • pytest入门十:配置文件
  • OpenGL ES 03 加载3张图片并做混合处理
  • 【Websokect】服务器https协议下ws连接失败问题及解决办法
  • 鸿蒙项目云捐助第十六讲云捐助使用云数据库实现登录注册
  • 基于DockerCompose搭建Redis主从哨兵模式
  • js分页功能
  • 【Python】使用Selenium 操作浏览器 自动化测试 记录
  • regression里面的误差来源
  • Pytorch | 从零构建AlexNet对CIFAR10进行分类
  • Linux函数栈帧
  • windows上安装Redis
  • 对AI现状和未来发展的浅见
  • 关于代码注释
  • 分布式算法(一):从ACID和BASE到CAP
  • 面试题整理6----什么是进程最大数、最大线程数、进程打开的文件数,怎么调整
  • 百度飞桨:零基础入门深度学习
  • cocos creator制作2dTop-down游戏(虚拟摇杆、地图加载)
  • C# 基本信息介绍
  • python之OpenGL应用(1)入门篇
  • TCP拥塞控制
  • 2024年12月英语六级CET6写作与翻译笔记
  • 实现线程同步的方法
  • WSL Ubuntu
  • 1、数据库概念和mysql表的管理