Java方法+数组介绍

目录

1.什么是方法

2.方法重载的概念

3.可变参数编程

4.数组的用法

4.1数组创建方法

4.2数组越界问题

4.3求解数组长度

4.4三个遍历数组的方式

 4.5引用变量堆栈图

4.6经典题目解析

5.数组的应用场景

5.1函数的形参和实参

5.2普通的基本数据类型参数

5.3对比案例

5.4数组作为返回值

6.一些用法的模拟实现

6.1模拟实现Array.toString

6.2模拟实现数组元素的拷贝

6.3原生的拷贝函数

6.4扩容的函数

6.5局部拷贝


1.什么是方法

Java里面的这个方法其实就是我们之前学习的这个函数;

下面的就是两个方法:一个是用来求两个数字的和,一个是判断一个年份是不是闰年的方法;其实本质上就是我们说的函数,只不过在这个java里面换了个名字:叫做方法;

2.方法重载的概念

这个就是一个类里面可以定义名字相同的函数(或者是方法),只要他们的这个参数的类型不一样就可以共同存在;

这个其实就是C++里面的这个缺省参数,名字相同,类型不一样,这样进行修饰的时候就可以显示出来他们的区别;

但是如果这个参数的上面的两个条件都不满足,只是函数的返回值不一样,这个时候不属于方法重载的范畴;

3.可变参数编程

就是我们的这个参数的数据类型都是一样的,我们可以不像下面的一个一个的传递参数,而是使用可变参数编程的方法,...表示的就是我们的这个函数里面的参数的个数就是不确定的;

我么可以进行调试,通过调试进行这个可变参数的观察,我们发现程序调试到这个阶段的时候

4.数组的用法

4.1数组创建方法

下面的是三个创建的方法,第一个就是直接类似于这个C的创建方法,就是这个括号的位置发生了变化,这个适合C里面的数组的一大书写上面的区别;

第二个是加上了这个new int[]在这个数组的前面,其他的和第一种方式没有任何区别;

第三个就是不进行这个初始化的操作,就是没有进行任何的元素的指定,这个时候如果是C的话,里面的元素就是随机数值,但是如果是我们的java,这个里面的内容就会被初始化为0

4.2数组越界问题

当我们的数组元素只有5个,我们访问21这个下标,这个时候就会出现数组元素越界的报错;

4.3求解数组长度

在我们的java里面可以直接使用这个数组的.length属性求解出来这个数组的长度,也就是这个数组里面的元素的个数;

4.4三个遍历数组的方式

第一个便利的方式就是使用的我们的for循环,这个循环的终止条件就是我们的这个下标大于我们的数组的长度;

第二种使用的就是类似于这个C++里面的范围for的这个方式进行打印输出,但是这个方式我们无法对于这个数组元素的数值大小进行修改;

第三种就是使用的这个toString这个方法,里面的这个参数就是我们的数组名字,这个打印的结果其实是和前面的两个有所区别的,如下图所示,就是外面加上了中括号;

 4.5引用变量堆栈图

array这个引用指向了那个对象,当这个引用不知道指向哪个对象的时候,可以赋值为null,这个时候引用不指向任何的对象;

我们的这个实际的数据是在堆区上面开辟的空间,栈区上面的只是这个地址,可以找到对应的数组元素罢了,数组名其实也是这个数组第一个元素地址;

4.6经典题目解析

首先定义array1这个数组,对于这个数组里面的三个元素进行赋值,然后定义了这个array2这个数组,也是对于这个数组里面的元素进行赋值,根据目前的这个赋值情况,我们就可以看到这个目前的内存分配情况,以及这个数据在内存里面的具体的存储位置;

我们的这个array1=array2就是这个指针的指向位置的变化,像这个执行之后就是我们的array这个引用的指针指向的就是我们的array2的这个地址,然后这个原来的这个array2数组里面的这个元素就会被自动进行回收,这个是一个垃圾回收机制;

下面的这个执行的时候其实我们的array1和array2就是指向的相同位置,因此这个下面无论是这个array1还是array2里面的这个数组元素的修改,实际上这个时候因为指向的都是这个array2,因此这个实际上都是对于我们的这个array2进行操作的;

5.数组的应用场景

5.1函数的形参和实参

这个相当于传递的就是引用,因此这个打印结果就是99,20,30;

这个是引用类型的传递,因此这个形参的修改回改变我们的实参的数值,这个实际上就是因为我们的这个形参执指向的就是我们的实参的这个数组的地址,因此这个修改时有效的;

下面的5.2里面的这个基本类型的参数才是这个形参不影响实参(和C语言是一样的);

5.2普通的基本数据类型参数

下面的这个其实就和我们的C语言里面的学习的形参和实参就没有区别了,这个num打印的结果就是0,x的打印结果就是0,这个时候的形参的修改不影响实参;

5.3对比案例

不是传递引用就一定会修改我们的实参的数值,我们需要具体得看实参,形参干了什么;

像下面的这个调用func1的时候,这个就会开辟新的空间,因此不影响原来的这个数组;

调用这个func2的时候,就是上面的情况,会修改我们的原来的实参的数值大小;

5.4数组作为返回值

下面的这个情况下,我们的ret和temp这个时候就指向的相同的地址空间;

6.一些用法的模拟实现

6.1模拟实现Array.toString

6.2模拟实现数组元素的拷贝

要想是现在这个数组元素的拷贝,首先我们在这个自定义函数里面开辟了相同大小的这个copy数组,这个数组大小和我们想要拷贝的数组的大小是一样的;

然后我们吧传递过来的这个参数的数组的每一个元素复制到这个我们的这个copy数组里面去,这个时候就可以实现这个数组元素的拷贝;

6.3原生的拷贝函数

就是我们的这个Arrays这个类里面的copyOf这个方法,实现我们的这个数组的拷贝,这个参数有两个,第一个是需要进行拷贝的数组,第二个就是我们的需要拷贝的元素的数量;

6.4扩容的函数

就是我们的这个第二个参数如果是一个大于我们的length的长度,这个时候打印的结果就会把多出来的部分使用数字0进行填充,这个时候的就是相当于我们的扩容函数进行使用;

6.5局部拷贝

就是我们使用这个类里面的coptofrange这个方法进行一个范围的拷贝;我们下面的这个案例里面是拷贝的从这个2下标到5下标,这个是左闭右开区间;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值