java入坑笔记-数组(二)

目录

简介

数组概论总结 

数组定义格式

数组初始化概论

动态初始化

数组元素的赋值及使用

静态初始化

二维数组

动态初始化

静态初始化

数组中的内存分配

数组常见异常

数组索引越界

空指针异常

数组中常见操作

遍历数组

获取最大值 

 


简介

如果程序需要5个int类型的变量,利用我们学到的基础知识,我们可以利用以下代码声明变量:

int a1,a2,a3,a4,a5;

可是突然有一天我们需要声明一百个变量时,我们该怎么办呢?总不能复制一百次吧?

为了解决这个办法,我们就需要学习数组的知识。

数组是相同类型的变量顺序组成的一种复合数据类型(数组是一些类型相同的变量组成的集合),称这些相同类型的变量为数组的元素或单元。

数组概论总结 

  1. 一次性声明大量变量
  2. 要储存的类型数据相同

 

数组定义格式

声明一维数组有以下两种格式

格式一:

//数组类型 [] 数组名
int [] arr;
//定义一个数组,数组名为arr

格式二:

//数组类型 数组名[] 
char arr[];
//定义一个char类型的变量,变量名为arr的数组

可以一次性声明多个数组:

int [] a,b,c,d,e;

数组初始化概论

Java中的数组必须先初始化,然后才能使用 

所谓的初始化:就是为了数组中的数组元素分配内存空间,并为每个数组元素赋值

动态初始化

动态初始化:初始化时只指定数组长度,由系统为数组分配初始化值

格式:数据类型 [] 变量名 = new 数据类型[数据长度];

示范:

int [] arr = new int[3];

解析:

  • int []:说明这是一个int类型的数组
  • arr :数组名称
  • new :为数组申请内存空间
  • int [3]:说明这是一个int类型的数组,3为数组的长度,就是数组中存放元素的个数

数组元素的赋值及使用

在赋值前,需要先了解索引。索引是数组中数据的编号方式。

  • 作用:索引用于访问数组中的数据使用,数组名[索引]等同与变量名,是一种特殊的变量名
  • 特征1:索引从0开始
  • 特征2:索引是连续的
  • 特征3:索引逐一增加,每次加1

我们尝试访问数组中的元素,在没赋值之前,数组中的数据均为0。

数组赋值

格式:数组名[索引] =  常量

示范:

arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

静态初始化

静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度

  • 格式: 数据类型[] 变量名 = new 数据类型[] {数据1,数据2,数据3,......};
  • 范例: int[] arr = new int[] {1,2,3};
  • 简化格式: 数据类型[] 变量名 = {数据1,数据2,数据3,......};
  • 范例: int[] arr ={1,2,3};

多个静态数组初始化:

int arr[] = {1,2,3},arr1 [] ={5,6,7};

二维数组

一个二维数组是由若干个一维数组构成的,利用Excel中的表格就可以很形象的表现出一个二维数组。

像这个表格就能表示出一个二维数组(图中表示一个3行2列的二维数组)

声明二维数组:

  • 数组类型 数组名[] [];
  • 数组类型 [] [] 数组名; 

动态初始化

声明二维数组后new运算为数组分配空间:

int arr[][] = new int[3][2];

上诉创建的二维数组arr就可以表示3行2列 

二维数组赋值示范:

arr[0][0] = 1;
arr[0][1] = 1;

静态初始化

静态初始化可以为每个一位数组分配长度不同的元素

格式:数据类型 二维数组名称[] = { {第一行元素},{第二行元素}}

示范:

int arr[][] = {
        {1},
        {2,3,4},
        {5,6}
};
System.out.println(arr[0][0]);
System.out.println(arr[2][1]);

数组中的内存分配

java程序运行时,需要在内存中分配空间,为了提高运算效率,就对空间进行不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

我们为数组分配好内存单位后,不加索引去打印这个数组时,就可以看到数组在内存单元中的地址。

需要注意的是,对于char类型数组,System.out.println()打印数组名时,并不会打印内存单元的地址,而是打印数组中全部元素的值。

当你想打印char类型数组的内存单元的地址时,需要将数组和字符串做并置运算。

char a[] = {'h','e','l','l','o',' ','w','o','r','l','d'};
System.out.println(""+a);

 

以int数组为例在初始化时,会为储存空间添加默认值:

  • 整数 :默认值0
  • 浮点数:默认值0.0
  • 布尔值:默认值false
  • 字符:默认值空字符
  • 引用数据类型:默认值是null

注意

  • 栈内存储存的变量为局部变量 使用完会消失 
  • 堆内存会储存空间添加的默认值,每个new出来的东西都有一个地址值
  • 使用完毕会被垃圾回收器回收

当我们给数组中元素赋值时,堆内存就会发生改变

当一个数组创建好内存空间后,将一个数组赋值给另一个数组(两个数组类型必须相同)。

会产生多个数组指向同一个地址。

所以,当你修改了数组arr2中的元素时,你会发现,数组arr中的元素也发生了改变 

二维数组中内存分配

数组常见异常

  • 索引越界:访问了数组中不存在的索引对应的元素,照成索引越界问题
  • 空指针异常:访问的数组已经不再指向堆内存的数据,照成空指针异常

数组索引越界

ArrayIndexOutOfBoundsException

你只创建了3个空间位置,但你要获取第四个空间的变量。

空指针异常

NullPointerException

数组在栈内存中已经没有内存单元地址了,如果我们还向内存单元中获取元素,会进行空指针报错

数组中常见操作

遍历数组

length是用来获取数组的元素个数

在for循环中,利用arr.length来做条件判断语

int arr[] = {1,2,3,4};

for (int i = 0 ;i<arr.length;i++){
    System.out.println(arr[i]);

获取最大值 

int arr[] = {11,2,333,44};
        int max = arr[0];

        for (int i = 0 ;i<arr.length;i++){
            if(arr[i] > max){
                max = arr[i];
            }
        }
        System.out.println(max);

 

猜你喜欢

转载自blog.csdn.net/weixin_41924764/article/details/110262245
今日推荐