Java 数组

Java 数组,第1张

Java 数组 理解数组


数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。
 Java 语言中提供的数组是用来存储固定大小的同类型元素。你可以声明一个数组变量,
如 numbers [100]来代替直接声明100个独立变量number0,number1,…,number99。
数组中的每一个数据被称为数组元素,通常可以通过数组元素的索引来访问数组元素,包括数组元素的赋值和取值。下面将介绍 java 语言的数组。数组也是一种类型,数组是一种引用类型,如 int 是基本数据类型, int [就是引用类型。 java 数组要求所有的数组元素有相同的数据类型,因此在一个数组中数组元素的类型是唯一的,一个数组只能存储一种数据类型的数据,而不能存储多种数据类型的数据。
一旦数组初始化完成,数组内存所占的空间也被固定下来,因此数组长度是不可以改变。即使把某个数组元素的数据清空。其所占的空间仍然被保留,依然属于该数组,数组长度依然不变。数组既可以存放基本数据类型也可以存放引用数据类型,只要数组元素具有相同的类型就可以


声明数组变量


首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
 数据类型[ ] 数组名; /首选的方法或

 数据类型   数组名[]; /效果相同,但不是首选方法
数组是一种引用型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量(也就是定义了一个指针),这个引用变量还未指向任何有效的内存,因此定义数组时不能指定数组的长度。而且由于定义数组仅仅是定义了一个引用变量,并未指向任何有效的内存空间,所以还没有内存空间来存储数组元素,因此这个数组也不能使用,只有对数组初始化后,才能使用。
有一点需要注意,那就是,声明了一个数组,仅仅是声明,你仅仅是有了这么一个名称而已,你可以认为计算机为你的这个数组开辟了一个新的内存地址,但里面没有任何东西。由于没有初始化,所以你的这个数组现在是徒有其表,如果你在声明之后,没有初始化就想马上使用这个数组, java 就会报错,比如这样:

public class ArrayDefine {
public static void main(String[] args){
int[] a;
//The local variable a may not have been initialized
System.out.println(a);
 }
}


我们看到,这个程序无法通过编译,观察错误信息,是这样的:
 variabl a might not have been initialized ,就是说,变量 a 也许还没有被初始化。我们知道,不是也许,真的就没有初始化。其实不光是数组,任何一个数据,如果你只是声明,那是不能直接使用的。下面是这两种语法的代码示例:
 int[ ] a ;  首选的方法或
 int a[] ;  效果相同,但不是首选方法


初始化


 Java 中必须先对数组初始化,才能使用。初始化就是为数组的数组元素分配内存空间,并为每个数组元素赋初值。
数组的初始化有两种
静态初始化
在定义数字的同时就为数组元素分配空间并赋值;
 dataType [] arrayRefVar = new dataType {value0,value1,…, valuek };
在上面的语法格式中,前面的 dataType 就是数组元素的数据类型,此处的 dataType 必须与定义数组变量时所使用的 dataType 相同,也可以是定义数组时所使用的 dataType 的子类,并且使用大括号把所有的数组元素括起来,多个数组元素之间以英文逗号(,)隔开,定义初始化值得大括号紧跟[]之后。


静态初始化的简化格式


 dataType arrayRefVar ={value0,value1,…, value 例如 int [] a ={3,4,5,6};
动态初始化
数组定义与为数组分配空间和赋值的 *** 作分开进行;动态初始化只指定数组长度,由系统为每个数组元素指定初始值,动态初始化的语法格式如下: arrayRefVar = new dataType [ arraySize ];
在上面语法中,需要指定一个 int 整型的 arraySize 参数,这个参数指定了数组的长度,也就是可以容纳数组元素的个数。下面代码示范了如何动态初始化。

 

public class ArrayDynamicInit {
public static void main(String[] args) { 
// 数组大小
      int length = 5;
      // 定义int类型的数组
      int[] a = new int[length];     
      for (int i = 0; i < length; i++) {
         System.out.println(a[i]);
      }
      // 定义double类型的数组
      double[] d= new double[length];     
      for (int i = 0; i < length; i++) {
         System.out.println(d[i]);
      }
      
      // 定义float类型的数组
      float[] f= new float[length];     
      for (int i = 0; i < length; i++) {
         System.out.println(f[i]);
      }
      // 定义boolean类型的数组
      boolean[] b= new boolean[length];     
      for (int i = 0; i < length; i++) {
         System.out.println(b[i]);
      }
    // 定义char类型的数组
      char[] c= new char[length];     
      for (int i = 0; i < length; i++) {
         System.out.println("char:"+c[i]);
         System.out.println("unicode : "+"\u"+Integer.toHexString(c[i]));
      }
}

}

创建数组时必须明确规定大小或内容:
    数据类型[ ] 数组名=new 数据类型[长度];          
    数据类型[ ] 数组名=new 数据类型[]{1,2,3,4,5};
    数据类型[ ] 数组名={1,2,3,4,5};                        
    [ ]表示是一维数组
    [ ][ ]表示二维数组


初始值


下面是系统为数组分配的初始值。
1.数组元素的类型是基本类型中的整数类型( byte 、 short 、 int 和 long ),则数组元素的值是0。
2.数组元素的类型是基本类型中的浮点类型( float 、 double ),则数组元素的值是0.0。3.数组元素的类型是基本类型中的字符类型( char ),则数组元素的值是'u0000。
4.数组元素的类型是基本类型中的布尔类型( boolean ),则数组元素的值是 false 。
5.数组元素的类型是引用类型(类、接口和数组),则数组元素的值是 null 。

数组元素的表示

格式 索引值就是一个int数字,代表数组当中元素的编号。

数组名[索引值]

注意 索引值就是一个int数字,代表数组当中元素的编号。

索引值从0开始,一直到“数组的长度-1”为止。例如长度为5的数组他的索引范围为0到4

数组长度 在java中我们可以非常方便的获取到数组的长度,格式如下:

数组名.length

 int[] arr = {1,2,3,4};
  //输出数组长度
  System.out.println(arr.length);

数组的遍历 我们在 *** 作数组的时候很多时候需要对数组的每个元素挨个 *** 作一遍,这种情况下我们就可以对数组进行遍历 *** 作

int[] arr={1,2,3,4,5,7};
//遍历输出数组元素
for(int i=0;i

数组角标越界异常 创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运行后,将会抛出 ArrayIndexOutOfBoundsException 数组越界异常

访问到了数组中的不存在的脚标时发生

public static void main(String[] args) {
    int[] arr = {1,2,3};
    System.out.println(arr[3]);
}

空指针异常(NullPointerException) arr引用没有指向实体,却在 *** 作实体中的元素时。

int[] arr = null;
System.out.println(arr[0]);

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5722455.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存