java中数组的定义与使用跟方法的使用

Java中的方法类似于C语言中函数的概念,但是较之C语言的函数,Java中的方法对于返回值与形式的要求要更为严格,且Java方法支持重载。

1,方法的定义

修饰符 返回值类型 方法名(形参,形参){ 方法体代码; return 返回值; } //如: public static int add(int x, int y) { return x+y; }

如上,其中public static 为访问修饰限定符,int add(int x, int y)与C语言概念相同。

注意事项:

1,修饰符:现阶段直接使用 public static 固定搭配

2,返回值类型:如果方法有返回值,返回值类型必须和返回的实体类型一致,如果没有返回值,则必须写成void

3,方法名字:采用小驼峰命名

4,参数列表::如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开

5,在Java中没有方法声明一说,且方法不能嵌套定义,方法必须写在类中。

方法调用执行过程:

程序在调用方法时,系统会为其开辟新的空间,在调用结束后,系统会将该空间释放。--方法栈帧

Java中实参与形参的关系:

在Java语言中没有指针的概念,也不能对变量进行取地址操作。

所以,在Java中,形参永远是实参的临时拷贝,实参与形参是由两个独立的空间单独存放的不同的个体。

2,方法重载

为什么需要方法重载:

在实际开发过程中,我们可能会出现多种不同类型的同质需求,如int类型的加法函数与double类型的加法函数,其实现逻辑一致,只是类型不同,如下:

当我们出现了多个同质不同类型的需求是,此时我们为了区分,一般会将其命名为:intAdd,doubleAdd,floatAdd....等等一系列的名字,这对我们在开发时来说无疑是繁琐的。那么是否能将所有函数都命名为add呢?

方法重载概念:

在自然语言中,一个词语如果有多重含义,那么就说该词语被重载了,具体代表什么含义需要结合不同的场景去使用。

在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了,如下:

创建一个方法并使其重载:

方法重载必须满足以下条件:

1,方法名必须相同

2,参数列表必须不同(参数的个数、类型、次序)

3,方法重载与返回值类型无关

方法重载知识点补充:

在我们需要创建方法时,若是需要对一组数据进行操作,我们可能会传递数组。

在我们需要对一组数据进行相加操作时,可以创建方法,将该数组传递给方法:

上图中的函数可以使用如下代替,这两种写法代表的是一个意思:

其中... 叫做可变参数。

3,方法签名

在同一个作用域中不能定义两个名称相同的变量名,那么为什么类中可以定义两个方法名相同的方法呢?其主要实现依靠于方法签名。

方法签名:修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。

4,数组的定义

数组是相同类型元素的一个集合,在内存中是以一段连续的内存空间。

在Java语言中,数组是一个引用数据类型,这就意味着其数组本身是存储的是所指向对象的地址,实际上数据是存储在数组对象中的。这很重要!

3,数组的创建及其初始化

在Java语言中,数组有两种常见的初始化方式:

  • 动态初始化(指定长度)
  • 静态初始化(指定内容)

(1)动态初始化(指定长度)

创建方式:

1))常规创建

//推荐 int[] array = new int[10]; //C语言写法,可以运行,但不推荐,仅作了解 int array [] = new int[10];

2))使用变量指定长度

除了上述两种创建方式外,还可以使用变量来指定数组长度,但要注意的是,数组有定长特性,一旦指定便无法再更改!,示例如下

可以使用变量来指定数组大小,但是当数组创建后,数组大小便固定,无法再进行修改

int n = 2; int[] array = new int[n];

3))拆分创建

动态初始化可以将其创建与指定长度分为两个步骤来写,如下:

即是先创建一个数组引用,再给该引用引用一个数组对象

int[] array; array = new int[10];

注意:以上new + (类型)int[10](大小),可以理解为在堆区创建一个数组对象,并将该数组对象的地址交由数组名保存。后续该数组即可通过地址访问到数组对象内存储的数据。

(2)静态初始化(指定内容)

创建方式

1))常规创建

//常规方式 int[] array = new int[]{1,2,3,4,5}; //同理,此类方式可以将创建于指定内容拆分来写,如下: int[] array; array = new int[]{1,2,3,4,5};

2))简便创建

注意:简便创建无法拆分!

int[] array = {1,2,3,4,5}; //此种方式创建与常规创建无区别,但是需要注意的是,此种方式不可拆分!

注意事项:

1,将数组赋值给数组,意为改变数组指向的对象。

2,仅有引用类型才能指向对象,并且一个引用类型仅能指向一个对象。

3,数组变量为引用变量,其存储的是所指向对象的地址,当我们创建一个数组变量但不对其开辟空间和初始化时,应当将该数组变量置为null(小写,null代表空引用,也就是不指向一个对象的引用)。

4,当我们开辟数组并对其指定空间却未对其初始化时,编译器会将元素初始化为默认值:

当数组中储存的元素类型为基本数据类型时:

当数组中储存的元素类型为引用类型时,默认值为null。

5,数组的访问

(1)数组元素的访问

与C语言一致,使用下标访问数组元素。

但是在Java语言中新增了接口 数组名.length:

数组名.length == 数组元素个数。

需要注意的是:

求数组长度是,用法为 array.length;

求字符串长度,用法为 string.length();

(2)遍历数组

在java中除去常规的for、while循环遍历数组外,还提供了一种增强for循环——for-each遍历数组。

for-each循环

for-each循环格式:

//支持嵌套 for(与数组元素同类型的变量:数组名) { //循环体 }

for-each遍历数组:

for-each循环较之for循环遍历数组,省去了循环条件的编写,适合直接对数组进行遍历。但是正是由于无循环条件,导致若是需要在循环体内写入判断条件会比较复杂。

6,数组的应用场景

1,作为函数的参数

数组作为一个引用类型,传参就是传递其所指向的对象地址。

正因为是传所储存的对象地址,故在函数中,只能对同一片空间内部进行修改。类似一级指针传参,可以修改所指向地址内的值,而无法修改一级指针变量本身。

2,作为函数的返回值

在Java中,函数可直接返回数组。

7,数组部分接口(API)介绍

Java 中提供了 java.util.Arrays 包, 其中包含了一些操作数组的常用方法,下文将介绍部分接口。

(1)数组转字符串 .toString

接口使用格式:

import java.util.Arrays; public class Main{ public static void main(String[] args) { //返回值为字符串,故可直接打印 Arrays.toString(数组名); } }

使用示例:

(2)数组拷贝 .copyOf

接口使用格式:

import java.util.Arrays; public class Main{ public static void main(String[] args) { int[] array = new int[]{1,2,3,4,5}; //调用刚接口后,会返回拷贝后的数组,故需要使用数组接收。 int[] copy = Arrays.copyOf(待拷贝的目标数组,拷贝的长度); } }

使用示例:

(1)正常用法

(2)特殊用法:将其长度写成本身长度*n,再用本身接收,即是实现n倍扩容

(2)' 接口扩展(拷贝某个范围).copyOfRange

注意:在Java中,涉及到范围都是 左闭右开区间 表示,如下示例拷贝0~3范围的元素,结果为1,2,3。

接口使用格式:

import java.util.Arrays; public class Main{ public static void main(String[] args) { int[] array = new int[]{1,2,3,4,5}; //调用刚接口后,会返回拷贝后的数组,故需要使用数组接收。 int[] copy = Arrays.copyOfRange(待拷贝的目标数组,起始下标,终止下标); } }

使用示例:

(3)数组填充 .fill

接口使用格式:

import java.util.Arrays; public class Main{ public static void main(String[] args) { int[] array = new int[10]; Arrays.fill(待填充数组,待填充元素); } }

使用示例:

(1)正常用法

(2)指定范围填充

使用格式:

Arrays.fill(待填充数组,起始下标,终止下标,待填充元素);

(4)数组排序 .sort

接口使用格式:

import java.util.Arrays; public class Main{ public static void main(String[] args) { int[] array = {1,4,7,8,3,9,2}; //调用即可完成排序,默认升序 Arrays.sort(array); } }

使用示例:

8,二维数组

(1)创建二维数组

创建方式如下:

//指定内容 int[][] array = new int[][]{{1,2,3},{2,3,4}}; //省略 int[][] array = {{1,2,3},{2,3,4}}; //指定长度 int[][] = new int[3][5]; //不规则的二维数组 //仅定义行 int[][] = new int[3][];

(2)不规则的二维数组

不规则的二维数组创建方式:仅指定行,不指定列。

int[][] = new int[3][];

之所以称之为不规则的二维数组,是因为在Java语言中,数组是引用类型变量,其存储的是所指向的数组对象的地址。

而二维数组的每个元素都是一维数组,也就是说,二维数组每个元素存储的都是一个数组对象的地址。当我们只指定行数未指定列数时,数组没有开辟空间,其每个元素存储的都是null。

但是我们可以分别对二维数组的元素开辟一维数组,并且长度可以不同,这就是不规则的二维数组。

图示如下:

可以看到,所创建的二维数组每个元素的长度可以不相同。

(2)遍历二维数组

遍历打印方式:

(1)for循环遍历

(2)使用 .deepToString 接口

(3)使用for-each循环遍历

  • 33
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值