方法(二)

45 阅读4分钟

方法中的参数传递:

方法的使用,本质上是一个方法模块去调用另一个方法模块中的代码。

在很多情况下,被调用的方法模块(methodA)需要用到调用方(main)的数据。 而根据变量的作用域,main当中的数据只能在main方法内部操作,methodA看不到也操作不到,所以我们需要传参。

当我们调用代码的时候,首先不是执行{}内的语句,而是先执行"()"当中的形参语句,而形参语句的语法就是声明变量。所以一旦调用methodA,会先在methodA当中申明一个叫做a的整型变量。

然后,JVM(Java虚拟机)会做数据传递,把实参的值传递给形参变量,因此a里面被放上了100。

在method当中对a进行任何操作,都不会直接影响到main当中的num,如果要想影响,只有 让methodA把a变量的值返回出去,并且重新赋值给num。

值传递

在Java当中参数只有一种传递方式 --- "值传递" ,永远都是把实参的"值"传递给形参。

只是由于Java中基本数据类型变量和引用数据类型变量保存值的方式不同,造成了效果上的差异!(牢记:不是传递方式的不同)。

基本数据类型变量的值是保存在变量本身当中的,所以是把真正的数据值传递给形参;

引用数据类型变量的值是指向真正数据的引用,所以传参的时候是把这个引用传给了形参,从而导致形参和实参指向了同一个真正的数据(对象)。

可变参写法

在调用处,即可以像传统方式直接传递一个数组对象; 也能够采用元素罗列的方式进行传递,这样做就在某些场景中省略了申明数组的语句。

当然,作为形参的args仍然在methodD方法中被认为是一个数组,应该继续使用数组的语法 进行操作。

JDK新语法:当用数组作为参数的时候,可以把形参设计为可变参数。

传统写法:在调用处,只能是申明一个明确的数组对象,然后把该数组对象作为实参进行传递。

方法调用栈:

程序执行的顺序:

1、默认是从main方法的第一句代码顺序往下,直到main方法的最后一句;

2、分支语句和循环语句打破顺序执行; 分支语句控制了根据条件执行某部分代码,而让另外一部分代码不执行; 循环语句控制了某部分代码被反复的连续执行。

3、方法的调用其实也改变了顺序执行。 一旦发生了方法调用,那么程序的流程就会离开调用处,进入被调用方法内部执行,直到该方法执行结束,然后再返回方法调用处继续往下执行。

在方法连续进行嵌套调用的时候,先调用的方法后结束,后调用的方法先结束。这种顺序形成了 "先进后出" 的效果,专业词汇叫做 "栈"

方法重载:

所谓方法重载就是在一个java类当中允许命名多个重名的方法。

名字一样的情况下,是依赖参数列表的不同来区分他们的,不考虑返回类型的不同。

参数列表的不同包括:参数的个数不同,参数的类型不同,参数顺序不同,跟参数名无关。

递归:

一个方法自己调用自己本身,在效果上它就是一种循环,循环执行该方法自己内部的代码。

递归的关键是控制循环的结束,也就是说自己内部调用自己不能采用无条件调用,一定要有一个判断,该判断的作用是让它在某个时刻停止自己调用自己,然后原路返回。

无论是for、while、do-while 还是递归,虽然都可以通过程序员的控制实现相同的效果,但是在合适场景中使用最适用的语法才是自然的。

for - 明确直到循环次数;

while - 不知道循环次数,只直到某个条件为假的时候退出循环;

do-while - 与while相同,但至少要执行一次;

递归 - 上一次循环的结果=下一次循环的初始条件。