学习打卡05-方法以及方法重载

1|01,方法是什么

方法:就是一段具有独立功能的代码块,不调用就不执行

2|02,使用方法有什么好处

示例:有两个数组,如果都想遍历其中的每个元素,如果不使用方法就需要两个循环输出

不使用方法:

int[] arr1 = {1, 2, 3, 4, 5, 6}; int[] arr2 = {3, 11, 22, 3, 4, 56, 1, 2, 3, 4, 5, 6}; // 一遍 for (int i = 0; i < arr1.length; i++) { System.out.print(arr1[i] + "\t"); } // 两遍 System.out.println(); for (int i = 0; i < arr2.length; i++) { System.out.print(arr2[i] + "\t"); }

使用方法:很明显的提高了代码的复用性

int[] arr1 = {1, 2, 3, 4, 5, 6}; int[] arr2 = {3, 11, 22, 3, 4, 56, 1, 2, 3, 4, 5, 6}; print(arr1); print(arr2); } public static void print(int[] arr1){ for (int i = 0; i < arr1.length; i++) { System.out.print(arr1[i] + "\t"); } System.out.println(); }

通过以上的代码:可以简单的总结下 使用方法的好处

  1. 提高代码的复用性
  2. 方便团队协作,分工明确 —–》 比如上面的print方法 职员A写,职员B只需要调用就好

3|03,如何定义和调用方法

这里入门先按照下面的形式进行定义:

public static void 方法名(){ 方法体 } 修饰符 返回值类型 方法名(形参列表){ 方法体代码(需要执行的功能代码) return 返回值; }

设计方法的时候应考虑:

  1. 方法是否需要接收数据处理
  2. 方法是否需要返回数据,并且返回数据的类型

注意事项:

  1. 如果方法不需要返回数据,返回值类型必须申明成void(无返回值声明), 此时方法内部不可以使用return返回数据。

  2. 方法如果不需要接收数据,则不需要定义形参,且调用方法时也不可以传数据给方法了。

  3. 没有参数,且没有返回值类型(void)声明的方法,称为无参数、无返回值的方法,依次类推。

方法定义时几个注意点

image

  1. 方法的修饰符:暂时都使用public static 修饰。

  2. 方法声明了具体的返回值类型,内部必须使用return返回对应类型的数据。

  3. 形参列表可以有多个,甚至可以没有; 如果有多个形参,多个形参必须用“,”隔开,且不能给初始化值。

1)方法在类中的位置放前放后无所谓,但一个方法不能定义在另一个方法里面。 2)方法的返回值类型写void(无返回声明)时,方法内不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部则必须使用return返回对应类型的数据。 3return语句的下面,不能编写代码,属于无效的代码,执行不到这儿。 4)方法不调用就不会执行, 调用方法时,传给方法的数据,必须严格匹配方法的参数情况。 5)调用有返回值的方法,有3种方式:1、可以定义变量接收结果 2、或者直接输出调用,3、甚至直接调用; 6)调用无返回值的方法,只有1种方式:1、只能直接调用。 // 注:(5)(6)实例如下: // 1,直接调用 --- 》 适用于无返回值的数据 print(); // 2,赋值调用 int sum = sum(20, 32); System.out.println(sum); // 3,输出调用 System.out.println(sum(20, 11)); } public static int sum(int num1, int num2) { int sum = num1 + num2; return sum; } public static void print() { for (int i = 0; i < 3; i++) { System.out.println("Hello World"); } }

4|05,方法在计算机中的执行原理

方法被调用的时候,是进入到栈内存中运行的。

image

代码经过编译成为.class字节码文件,jvm虚拟机执行,限制性main方法,入栈,当需要处理到其他的方法时,其他的方法入栈。即:只有当对应方法处理的时候才可以入栈。运行完毕,有返回值返回,然后出栈。

5|06,补充知识,debug的使用

image

这里有四个控制代码的箭头:

第一个(Step Over):无条件向下走一行 ,有方法跳过方法

第二个(Step Into):有方法进入方法,但是是自己所编写的方法代码

第三个(Force Step Into):进入到方法内,不管是自己编写的,还是系统提供的方法都进入

第四个(Step Out):退出当前的方法

6|07,参数传递

6|11,基本类型的参数传递 ——> 值传递,

值传递:指的是在传输实参给方法的形参的时候,传输的是实参变量中存储的值的拷贝。

实参:在方法内部定义的变量。

形参:定义方法时“(…)”中所声明的参数

public class MethodDemo { public static void main(String[] args) { int a = 10; change(10); System.out.print(a); // 这个时候打印的还是10,不是100 } public static void change(int c){ a=100; } } 因为是值的拷贝,所以是两个独立的变量在两个独立的作用域中:即一个main方法作用域,一个change方法作用域
6|22,引用类型的参数传递

前四天接触的引用类型只有 数组:所以这里用数组举例,在04-数组的介绍中说到,栈中是数组的引用,引用的是堆中变量的地址:即可以得出,数组的赋值只是把其引用的地址值赋予调用者。如下图:arr1和arr2指向同一个堆中的数据,所以如果有一个通过引用来修改堆中的数据的时候,再用另一个引用来获取数据的时候必然是修改过的数据;同过上面的代码作个展示

image

public class MethodDemo2 { public static void main(String[] args) { int[] arr = {10}; change(arr); System.out.print(arr[0]); // 这个时候打印的还是100,因为另一个引用修改了共同引用的堆中的值 } public static void change(int[] arr){ arr[0] = 100; } }

基本类型和引用类型的参数在传递的时候有什么不同?

  • 都是值传递

  • 基本类型的参数传输存储的数据值

  • 引用类型的参数传输存储的地址值

7|08,方法的重载

一个类中,出现多个方法的名称相同,但是它们的形参列表是不同的,那么这些方法就称为方法重载
和修饰符,返回类型无关;

形参列表不同:是指形参的个数,数据类型,顺序不同,和起什么名字无关

个数不同: public static void sum(int num1,int num2,int num3){} public static void sum(int num1){}
数据类型不同: public static void max(int n1,double n2){} public static void max(int n1,int n2){}
顺序不同: // 这样重载的好处,根据不同的参数顺序可以使用不同的方法处理 public static void add(int num1,double num2){ } public static void add(double num2,int num1){ }

8|09,return , break,continue的区别

return; 跳出并立即结束所在方法的执行。 break; 跳出并结束当前所在循环的执行。 continue; 结束当前所在循环的当次继续,进入下一次执行。

9|010,目标

  • 能够说出方法的作用
  • 能够按照业务需求定义出合适的方法格式
  • 能够说出方法调用的写法
  • 能够理解方法调用的内存图
  • 能够说出方法的参数传递是什么样的
  • 能够说出方法重载的概念,以及法重载的识别技巧
  • 能够说出在方法中单独使用return关键字的作用

__EOF__

本文作者尼古拉斯_帅气
本文链接https://www.cnblogs.com/yfs1024/p/17120906.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   yfs1024  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示