龙空技术网

三石说:java基础之数组

三石分享记 57

前言:

眼前同学们对“定义一维数组java”大约比较关心,小伙伴们都想要学习一些“定义一维数组java”的相关资讯。那么小编在网上搜集了一些对于“定义一维数组java””的相关内容,希望小伙伴们能喜欢,同学们快快来学习一下吧!

在聊集合的知识之前我们先看下数组,其实数组也是归纳到集合中的。

数组的定义

java数组就是线性表的定义,分配一段连续的空间用于存放数据。数组是比较简单的访问比较快。

数组的分类

一维数组

int [] a= new int[10] 分配连续的可存放元素个数为10的空间,

public class main{    public static void main(String[] args){        int [] array = new int[10];        array[1]=222;        array[2]=333;        System.out.println(array.length);        ArrayList<Integer> list = new ArrayList<>();        list.add(123);        list.add(22);        System.out.println(list);    }}

看了一维的之后我们再看看多维数组

多维数组

以二维数组为例,二维数组的实质:数组的数组。数组中的每一个元素仍然是个数组。

逻辑上可看做二维,其实并不是二维的

public void test(){    // 这是个3行的但是列未定义。    int[][] array= new int[3][];    array[0] = new int[5]; // 第0行有5列 ,创建有5个整形变量的数组    arry[1] = new int[4];    array[2]= new int[3];}
数组的初始化

Java语言是典型的静态语言,因此Java的数组是静态的,即当数组被初始化之后,该数组的长度是不可变的。Java程序中的数组必须经初始化才可使用。所谓初始化,就是为数组对象的元素分配内存空间,并为每个数组元素指定初始值。数组的初始化有以下两种方式。

■ 静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。

■ 动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。不管采用哪种方式初始化Java数组,一旦初始化完成,该数组的长度就不可改变,Java语言允许通过数组的length属性来访问数组的长度。

指定初始值时,系统将按如下规则分配初始值。

■数组元素的类型是基本类型中的整数类型(byte、short、int和long),则数组元素的值是0

■数组元素的类型是基本类型中的浮点类型(float、double),则数组元素的值是0.0。

■数组元素的类型是基本类型中的字符类型(char),则数组元素的值是'\u0000'。

■数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是false。

■数组元素的类型是引用类型(类、接口和数组),则数组元素的值是null。注意不要同时使用静态初始化和动态初始化。也就是说,不要在进行数组初始化时,既指定数组的长度,也为每个数组元素分配初始值。

Java的数组是静态的,一旦为数组初始化完成,数组元素的内存空间分配即结束,程序只能改变数组元素的值,而无法改变数组的长度。需要指出的是,Java的数组变量是一种引用类型的变量,数组变量并不是数组本身,它只是指向堆内存中的数组对象。因此,可以改变一个数组变量所引用的数组,这样可以造成数组长度可变的假象使用Java数组之前必须先初始化数组,也就是为数组元素分配内存空间,并指定初始值。实际上,如果真正掌握了Java数组在内存中分配机制,那么完全可以换一个方式来初始化数组,或者说,数组无需经过初始化。

始终记住:Java的数组变量是引用类型的变量,它并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中即可使用该数组变量

比如 :

public class ArrayTest3      {          public static void main(String[] args)          {            //定义并初始化nums数组            int[] nums=new int[]{3, 5, 20, 12};            //定义一个prices数组变量              int[] prices;            //让prices数组指向nums所引用的数组              prices = nums;            for (int i=0 ; i < prices.length ; i++)            {                    System.out.println(prices[i]);            }            //将prices数组的第3个元素赋值为34            prices[2]=34;            //访问nums数组的第3个元素,将看到输出34            System.out.println("nums数组的第3个元素的值是:"+nums[2]);          }      }从图1

常常说使用Java数组之前必须先进行初始化,可是现在prices变量却无需初始化,这不是互相矛盾吗?其实一点都都不矛盾。

这个例子最重要的一点指出了prices数组指向nums所引用的数组。内存模型如图所示

关键是大部分时候,我们把数组变量和数组对象搞混了,数组变量只是一个引用变量(有点类似于C语言里的指针),通常存放在栈内存中(也可被放入堆内存中的);而数组对象就是保存在堆内存中的连续内存空间。对数组执行初始化,其实并不是对数组变量执行初始化,而是要对数组对象执行初始化—也就是为该数组对象分配一块连续的内存空间,这块连续内存空间的长度就是数组的长度。虽然上面程序中的prices变量看似没有经过初始化,但执行prices=nums;就会让prices变量直接指向一个已经执行初始化的数组。对于数组变量来说,它并不需要进行所谓的初始化,只要让数组变量指向一个有效的数组对象,程序即可正常使用该数组变量。

好了,关于数组的增加删除修改,都是通过数组的遍历进行实现的,我在这里就不再多介绍了,在下面我们可以自己尝试一下。

这就是今天要讲的数组的操作。

标签: #定义一维数组java #java数组容量 #多维数组定义java #可变长度数组java