【Java SE】数组

🥰🥰🥰来都来了,不妨点个关注叭!
👉博客主页:欢迎各位大佬!👈

在这里插入图片描述
本期内容讲解数组的知识,你真的了解数组吗?通过本期内容的讲解,我们将会对Java中的数组有一个全面的了解,一起来看看吧!

1. 数组的定义和使用

1.1 数组的定义

1.1.1数组使命

数组的使命:用来存储一组相同数据类型的数据

1.1.2 怎么存数组?

连续内存
在这里插入图片描述

1.2 数组的创建与初始化

1.2.1 数组的创建

T[] 数组名 = new T[N];
T:代表数组中存放数据的类型,如int、double、String等等
T[]:代表数组类型
N:代表数组的长度

举个例子~

int[] array1 = new int[15];  

这就创建完成啦,代表创建了一个可以容纳15个int类型元素的数组

1.2.2 数组的初始化

以下为定义数组的三种方式:
在这里插入图片描述Java当中的数组其实就是一个对象,记住:Java当中一切皆对象
【注意事项】
1)如果数组中存储元素类型为引用类型,默认值为null
如果数组中存储元素类型为int类型,默认值为0,
如果数组中存储元素类型为boolean类型,默认值为false
2)方式1不可以分两步写,方式2、3可以
编译会报错!!,下面就会报错!
int[] array;
array = {1,2,3,4,5,6}

1.3 数组的使用

1.3.1 数组元素的访问

数组的内存是一段连续的空间,下标从0开始,通过下标访问数组任意位置的元素

int[]array = new int[]{33, 44, 40, 66, 78};
System.out.println(array[0]);
System.out.println(array[1]);
//注意不要越界,最大下标为数组长度-1

//数组中的元素进行修改
array[0] = 100;
System.out.println(array[0]);

注意:不要越界!

1.3.2数组元素的遍历

有两种遍历数组的方式
1.数组长度

int[]array = new int[]{33, 44, 40, 66, 78};
for(int i = 0; i < array.length; i++){
    System.out.println(array[i]);
}

array.length是该数组的长度
Q:为什么可以这样呢?
A:Arrays是一个类,调用它的属性length

补充知识:
打印数组1-5

public class Main {
    public static void main(String[] args) {
     int[] array = new int[5];
     for(int i = 0; i < array.length;i++) {
         array[i] = i+1;
     }
     System.out.println(Arrays.toString(array));
    }
}

在这里插入图片描述

2.for-each遍历

int[]array = new int[]{33, 44, 40, 66, 78};
for (int x : array) {
    System.out.println(x);
}

在这里插入图片描述

2. 类型及内存介绍

2.1 JVM内存分布

内存:一段连续的存储空间,主要用来存储程序运行时数据的。比如:
1.程序运行代码需要加载到内存中
2. 程序运行产生的中间数据要存放在内存
3. 程序中的常量保存等等
JVM对所使用的内存按照功能的不同进行划分,如下图所示:
在这里插入图片描述

程序计数器: 很小的空间,保存下一条执行指令地址
虚拟机栈: 方法调用相关,方法执行创建栈帧
本地方法栈: 与虚拟机栈作用类似,保存Native方法的局部变量
堆: new创建的对象保存在这里
方法区: 方法编译出的字节码保存在这个区域
在这里插入图片描述

2.2 基本、引用类型变量区别

基本数据类型变量,称为基本变量,该变量空间中直接存放的是其所对应的值
引用数据类型变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址

public static void fun1() {
    int a = 33;
    int[] array = new int[]{1,2,3,4};

画出上述变量的内存分配图,如!下:
在这里插入图片描述由上图可以得出:
引用变量不直接存储对象本身,存储是对象在堆中空间起始地址,通过该地址,引用变量可以去操作对象

2.3 null注意事项

int[] array = null;

代表array这个引用不指向任何对象
1> null 在 Java 中表示 “空引用” ,表示一个不指向对象的引用,即一个对象为空,则不能对其进行操作,否则会抛出NullPointerException异常
2> null 的作用类似于 C 语言中的 NULL (空指针),都表示一个无效的内存位置
注意: Java 中没有约定 null 和 0 号地址的内存有任何关联,不能直接加上我们的主观想法,认为null就是存0号地址的

2.4 引用变量注意事项

2.4.1 等号的理解

下面我们先看看这段代码输出的结果是夺少?

public static void main(String[] args) {
     int[] array1 = {22,43,56,77};
     array1[0] = 11;
     
     int[] array2 = array1;
     array2[0] = 88;
     
     System.out.println(Arrays.toString(array1));
     System.out.println(Arrays.toString(array2));
    }

下面画出这段代码的内存分配图,我们可以清晰得分析出结果:
在这里插入图片描述
所以输出结果都为[88,43,56,77]
【注意】
1> int[] array2 = array1;
代表array2这个引用指向了array1这个引用所指向的对象
2> 通过其中任何一个引用修改这个对象的值,另一个引用quiz访问的时候,也是会被改变的
【总结】
1> 局部变量(方法内部定义的变量)内存在栈上开辟
2> 基本变量在内存放的是值,引用变量放的是对象的地址
3> 在Java当中局部变量在使用的时候,必须初始化!!!

2.4.2 传递的理解

下面看看这两段代码,可以自己先想想会输出什么结果!

public static void main(String[] args) {
     int[] array1 = {22,43,56,77};
     func1(array1);
     System.out.println(Arrays.toString(array1));
    }
public static void func1(int[] array) {
     array[0] = 88;
    }

在这里插入图片描述
通过上图分析得,输出结果为:[88,43,56,77]
再来分析这一段代码,先想想会输出什么吧~

public static void main(String[] args) {
     int[] array1 = {22,43,56,77};
     func2(array1);
     System.out.println(Arrays.toString(array1));
    }
public static void func1(int[] array) {
     array = new int[] {5,7,8};
    }

在这里插入图片描述

通过上图分析得,输出结果为:[22,43,56,77]
【总结】
当数组作为参数进行传递的时候,其实还是按值传递的,只不过测试的值是一个地址!!!
那么会出现两种情况:
1> 形参修改指向
【array = new int[] 只会影响形参指向】
2> 形参修改指向
【array[0] = 100 才会影响实参】

3. 数组的应用

3.1 保存数据

public static void main(String[] args) {
    int[] array = {1, 2, 3, 4, 5};
    for(int i = 0; i < array.length; i++){
        System.out.println(Array.toString(array));
   }
}

3.2 作为函数参数

作为函数参数,既可以传基本数据类型,也可以传引用数据类型

传基本数据类型,改变形参的值,不改变实参
传引用数据类型,方法内部修改数组的内容, 方法外部的数组内容也发生改变
【因为数组是引用类型,按照引用类型来进行传递,可以修改其中存放的】

3.3 作为返回值

public static void main(String[] args) {
   int[] array = func;
   System.out.println(Array.toString(array));
}
public static int[] func() {
     int[] array1 = {5, 7, 8};
     return array1;
   }

在这里插入图片描述
return了一个地址,仅此而已

4. 二维数组

二维数组是特殊的一维数组,Java将这一点诠释得非常好,下面我们一起来看看二维数组

4.1 二维数组的定义

数据类型[][] 数组名 = new 数据类型 [行数][列数] { 初始化数据 };

int[][] arr = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11,12}};

【注意】Java中必须定义行数,可以不定义列数,每行列数可以不同,不一样为不规则列表

int[][] array = new int[2]; //定义二维数组array,行数为2
array[0] = new int[3]; //定义二维数组的第一行有3列
array[1] = new int[4]; //定义二维数组的第一行有3列

以上为不规则二维数组定义
在这里插入图片描述

4.2 遍历二维数组

这里介绍5种:
1> 每行遍历

public static void main(String[] args) {
     int[][] array = {22,43},{44,45}};
     System.out.println(Arrays.toString(array[0]));
     System.out.println(Arrays.toString(array[1]));
    }

2> 双重for循环

public static void main(String[] args) {
     int[][] array = {22,43},{44,45}};
      for(int i = 0; i < 2; i++) {
         for(int j = 0; j < 3; j++) {
         System.out.print(arrat[i][j]+" ");
         }
         System.out.println();
      }
    }

3> length

public static void main(String[] args) {
     int[][] array = {22,43},{44,45}};
      for(int i = 0; i < array.lenth; i++) {
         for(int j = 0; j < array[i].lenth; j++) {
         System.out.print(arrat[i][j]+" ");
         }
         System.out.println();
      }
    }

4> for-each

public static void main(String[] args) {
     int[][] array = {22,43},{44,45}};
      for(int[] ret : array) {
         for(int x : ret) {
          System.out.print(x+" ");
       }
         System.out.println();
      }
    }

5>deepToString

public static void main(String[] args) {
     int[][] array = {22,43},{44,45}};
     System.out.println(Arrays.deepToString(array));
    }

本期内容到此结束啦!有没有觉得收获颇多呢~学好数组,我们需要多画图帮助我们理解,画内存如何分配,就很清晰明了啦!下期见,一起继续加油吧

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值