前言:此内容为小博主自己理解之后所写的,如果有哪些内容错误或者不够合理和遗漏的,可以在评论区告诉我或者私我,我会进行改正,谢谢小伙伴们的支持!!!
一,方法的概念及使用
1.1,什么是方法?
方法就是一个代码片段。类似于c语言程序设计中的“函数”。
方法存在的意义:
(1)是能够模块化的组织代码(当代码模块比较复杂的时候)。
(2)做到代码被重复使用,一份代码可以在多个位置使用。
(3)让代码更好的理解更简单。
(4)直接调用现有的方法开发,不必重复造轮子。
1.2,方法的定义
方法语法的格式:
//方法定义
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
}
实例1:
实例2:
注意:(1)修饰符:现阶段直接使用public static固定搭配
(2)返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void
(3)方法名字:使用小驼峰命名
(4)参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开。
(5)方法体:方法内部要执行的语句
(6)在Java当中,方法必须写在类当中
(7)在Java当中,方法不能嵌套定义
(8)在Java当中,没有方法声明一说
1.2,方法调用的执行过程
调用方法——》传递参数——》找到方法地址——》执行被调用方法的方法体——》被调方法结束返回——》回到主调方法继续往下执行。
例子:计算两个整数相加
注意:(1)定义方法的时候,不会执行方法的代码。只有调用的时候才会执行。
(2)一个方法可以被多次调用。
(3)当遇到return后,这个函数开辟的内存就被销毁。
1.3,实参和形参的关系
方法的形参相当于数学函数中的自变量,比如:1+2+3+.....+n的公式为sum=$\frac{(1+n)*n}{2}$。
Java中方法的吗形参就相当于sum函数中的自变量n,用来接收sum函数在调用时传递的值的。形参的名字可以随意取,对方法没有任何影响,形参只是方法在定义时需要借助的一个变量,用来
保存方法在调用时传过来的值。如下两种,
public static int getSum(int N){//N是 形参
return (1+n)*n/2;
}
getSum(100);//10是实参,在方法调用时,形参N用来保存100
getSum(1000);//1000是实参,在方法调用时。形参N用来保存1000
public static int add(int a,int b){
return a+b;
}
add(2,3);//2和3是实参,在调用时传给形参a和b
注意:在Java中。实参的值永远都是拷贝到形参中,形参和实参本质时两个实体。
1.4,我们来看一个比较重要的细节,如下代码:
我们可以从上面的代码清楚的看到,在swap函数交换之后,形参x和y的值发生了改变,但是在main方法中a和b还是交换之前的值,即没有交换成功。为什么呢?
分析:实参a和b是main方法中的两个变量,其空间在main方法的栈(一块特殊的内存空间)中,而形参x和y是swap方法中的两个变量,x和y的空间在swap方法运行时的栈中,因此:实参a和b与形参x和y时=是两个没有任何关联性的变量,在swap方法调用时,只是将实参a和b中的值拷贝了一份传递给了形参x和y,所以对形参x和y操作不会对实参a和b产生任何影响。
那有人就会问,我是不是可以像c语言中的一样,将它的地址传过去?
在Java中,这是做不到的,因为Java对栈上变量的地址是拿不到的。那我们怎么做呢?我们可以用传引用类型参数(数组)来解决,如下代码:
1.5,没有返回值的方法
方法有没有返回值取决于这个程序需不需要返回值,有返回值一定要return,没有返回值时类型必须写成void,写成void就不需要return了。
例子:
二,方法的重载
2.1,方法重载的概念
在自然语言当中,一个词语如果有多重含义,那么就说该词语被重载了,具体代表什么含义需要结合具体的场景。
那么下Java中,方法也是可以重载的,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。
例子:
我们可以看到这样的程序是可以运行的。
但要有几点需要注意的:
1,方法名必须相同
2,参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
3,与返回值类型是否相同无关
4,编译器在编译代码时,会对实参类型进行推演的,根据推演的结果来确定调用哪个方法。
如下:
2.2,方法的签名
在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那么为什么类中就可以定义方法名相同的方法呢?
方法签名:是指经过编译器编译修改后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。
那上面方法重载后,Java是怎么执行的 呢?
上述代码经过编译后,使用JDK自带的Javap反汇编工具查看,具体操作:
(1),先对工程进行编译生成.class字节码文件
(2),在控制台进入到要查看的.class所在目录
(3),输入java -v字节码文件名字即可
通过这个反编译会生成一个Java的汇编代码(如下我们可以查看)
在这里就会有3个add方法 。
这里有一些方法签名中的特殊符号说明:
三,递归
3.1,递归的概念
一个方法在执行过程中调用自身,就称为“递归”。
递归相当于数学上的“数学递归法”,有一个起始条件 ,然后有一个递推公式。
递归的必要条件:
(1),将原问题划分为其子问题,注意:子问题必须要与原问题的解法相同。
(2),递归出口。
例子:递归求n的阶层。
3.2, 递归执行过程的分析
递归的程序的执行过程不太容易理解,要想理解清楚递归,必须先理解清楚“方法的执行过程”,尤其是“方法执行结束之后,回到调用位置继续往下执行”。
以上就是Java方法的内容,希望对你们有用。如果有什么可以评论区告诉我,我会进行改正,谢谢!!!。如果觉得写的好的,可以给个三连,嘻嘻!!!关注我,带你了解你以前没注意到的细节!!!