0


【Java从入门到精通】第六篇:#Java方法的使用##细节内容##基础内容@@快来看看当时你所没注意到问题吧#

前言:此内容为小博主自己理解之后所写的,如果有哪些内容错误或者不够合理和遗漏的,可以在评论区告诉我或者私我,我会进行改正,谢谢小伙伴们的支持!!!

一,方法的概念及使用

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方法的内容,希望对你们有用。如果有什么可以评论区告诉我,我会进行改正,谢谢!!!。如果觉得写的好的,可以给个三连,嘻嘻!!!关注我,带你了解你以前没注意到的细节!!!

标签: java 开发语言

本文转载自: https://blog.csdn.net/m0_62262008/article/details/123545210
版权归原作者 肖肖的猪会飞 所有, 如有侵权,请联系我们删除。

“【Java从入门到精通】第六篇:#Java方法的使用##细节内容##基础内容@@快来看看当时你所没注意到问题吧#”的评论:

还没有评论