java05-数组

目录

概述

数组是什么

为什么有数组

静态初始化数组

数组的访问

数组遍历

动态初始化数组

数组的内存执行原理

数组的执行原理

多个变量指向同一个数组的问题

数组案例

数组反转

随机排名

补充:debug工具使用


概述

数组是什么:

数组是一个容器,用于存储同类型的数据

为什么有数组:

没有数组:大量变量的定义、实现需求繁琐

使用场景:批量数据的存储和操作,数组比变量更合适

静态初始化数组

定义数组的时候直接给数组赋值

格式:
//完整格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,....};
int[] ages = new int[]{12,24,36};
double90 scores = new double[]{89.9,99.5,59.6,12.0};

//简化格式
数据类型[] 数组名 = {元素1,元素2,元素3,.....}; 
int[] ages = {12,34,56};

 注意:

  • 数据类型[] 数组名也可以写成 数据类型 数组名[]
  • 什么类型的数组只能存放什么类型的数据

数组变量名存储的是对应的数组在内存中的地址信息

数组的访问

数组名[索引](数组中的索引从0开始)

数组的长度属性:length

int[] arr = {12,34,56,78};
System.out.printIn{arr.length);    //获取数组的长度,其实就是数组元素的个数

 数组的最大索引:数组名.length-1(元素个数>0)

使用的索引超过数组的最大索引的后果:出bug,出现索引越界的提示

数组遍历

遍历:一个一个访问数据

遍历数组的原因:实现各种功能需要(求和,元素搜索,找最大值/最小值...)

数据类型[] 数组名 = {元素1,元素2,元素3,.....};
for (初始化变量i;i<数组名.length;i++){
    循环体;
}

动态初始化数组

定义数组时不存入具体的元素值,只确定数组存储的数据类型和数组的长度

格式:
 
数据类型[] 数组名 = new 数据类型[长度];
//例如:
//int[] arr = new int[3];

 注意:

        静态初始化和动态初始化数组的写法是独立的,不能混用

动态初始化数组元素默认值规则:

 

数组的内存执行原理

数组的执行原理

存储结构:在java中,数组是一块连续的内存区域,用于存储同类型数据,由于是连续存储的,所以数组的大小在创建时是固定的。

内存分配:创建数组时,jvm会在堆内存中分配一块连续的内存空间(数组的引用变量存储在栈内存中,指向堆内存中的数组对象)

内存访问:通过索引访问元素时,jvm根据起始地址和索引计算元素的内存地址,进行读写操作。

动态特性:虽然数组在创建时是固定的,但是在java中可以通过创建一个新的数组并且复制原数组的元素实现动态扩容,步骤如下:

  • 创建一个相对更大的数组
  • 将原来的数组复制到新数组中
  • 更新引用变量指向新数组

垃圾回收:数组不再被引用时,jvm垃圾回收机制会自动回收其占用的内存。

java内存分配介绍

方法区:字节码文件先加载到这个区域

栈:方法运行时所进入的内存,变量也是在这里

堆内存:new出来的东西会在这块内存开辟空间并产生地址

多个变量指向同一个数组的问题

多个数组变量中存储的是同一个数组对象的地址,需要注意的是多个变量修改的都是同一个数组对象中的数据。如果某个数组变量中存储的null,代表这个数组变量没有指向数组对象,此时可以输出这个变量,但是不能去访问这个数组变量的数据和数组长度。

数组案例

数组反转

public class Test2{
    public static void main(String[] args){
        int[] arr = {10,20,30,40,50};
        for(int i = 0, j = arr.length - 1; i < j; i++;j--){
            int temp = arr[j];
            arr[j] = arr[i];
            arr[i] = temp;
}
        for(int i = 0;i < arr.length;i++){
               System.out.printIn(arr[i] + " ");
        }
    }
}

随机排名

import java.util.Scanner;
import java.util.Random;

public class Test1{
    int[] codes = new int[5];
    Scanner sc = new Scanner(System.in);
    for(int i=0;i<codes.length;i++){
        System.out.printIn("请您输入当前第"+(i+1)+"个员工的工号:");
        int code = sc.nextInt();
    codes[i] = code;
}
    Random r = new Random();
    for(int i=0;i<codes.length;i++){
    int index = r.nextInt(codes.length);
    int temp = codes[index];
    codes[index] = codes[i];
    codes[i] = temp;
}
    for(int i = 0;i<codes.length;i++){
        System.out.print(codes[i] + " ");
}

补充:debug工具使用

Debug工具:

IDEA自带的断点调试工具,可以控制代码从断点开始一行一行的执行,然后详细观看程序执行的情况

  1. 在需要控制的代码行左侧,点击一下,形成断点(行号右边深色部分 非代码区域)
  2. Debug "程序名",启动后程序会在断点处暂停
  3. 往下走,控制程序一行一行的往下执行
  4. 可以看到详细的取值信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值