Java中的数组

Java的引用数据类型

  • 数组
  • 接口
  • 枚举

数组

一维数组

概念:一组数据的容器

声明

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

概念:

  1. 数组是引用数据类型
  2. 数组中的数据也可叫做元素
  3. 元素的编号也叫做下标/索引
  4. 下标从0开始
  5. 数组元素在内存中开辟的空间是连续的的
  6. 数组一旦初始化成功,长度不可变意味着数组不能添加或者删除元素

数组的初始化

  1. 静态初始化:元素由程序员指定,数组长度由系统分配

    //静态初始化1:声明的同时初始化
    String[] names = new String[]{"1","2","3","4","5"};
    //静态初始化2:先声明,再初始化
    String[] names;
    names = {"1","2","3","4","5"};
    //静态初始化3:简化版本
    String[] names = {"1","2","3","4","5"};
    
  2. 动态初始化:数组长度由程序员指定,元素由系统分配

    //动态初始化1:声明的同时初始化
    int[] arr = new int[5];
    //动态初始化2:先声明,再初始化
    int[] arr;
    arr = new int[5];
    

    动态初始化时,不同数据类型系统分配不同元素类型

    整数类型默认值:0
    浮点类型默认值:0.0
    字符类型默认值:’ ’
    布尔类型默认值:false
    引用类型默认值:null(空)

    小结:

    1. 初始化只知道元素,就使用静态初始化
    2. 初始化只知道长度,就使用动态初始化
    3. int类型的数组为引用数据类型,数组中的元素使基本数据类型

数组的遍历

  • for遍历

    public class Demo{
        public static void main(String[] args){
            String[] names = new String[]{"1","2","3","4","5"};
            for(i=0;i<names.length;i++){
                System.out.println(names[i])
            }
        }
    }
    
  • foreach遍历:增强for循环

    注意:ele的类型与names类型一致

    public class Demo{
        public static void main(String[] args){
            String[] names = new String[]{"1","2","3","4","5"};
            for(String ele:names){
                System.out.println(ele)
            }
        }
    }
    
  • for vs foreach

    当需要操作数组下标时,使用for

    当不需要操作数组下标时,使用foreach

练习:创建一个int类型的数组,长度由用户指定,数据由用户输入,输入完毕后获取最大值并输出

import java.util.Scanner;

public class Demo{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
		System.out.println("请输入数组长度:");
		//接收数组长度
		int len = scan.nextInt();
		//初始化数组
        int[] arr = new int[len];
		//元素
		for(int i=0;i<arr.length;i++){
			System.out.println("请输入" + (i+1) + "个数");
			int num = scan.nextInt();
			arr[i] = num;
		}
		
		//假设第一个数据为最大值
		int max = arr[0];
		for(int i=1;i<arr.length;i++){
			if(max<arr[i]){
				max = arr[i];
			}
		}
		System.out.println("最大的数字为" +max);
    }
}

数组初始化内存图

  1. 一维数组静态初始化内存图
    一维数组静态初始化内存图
    小结:

    当使用某个类(方法区中,只有程序结束时才会被回收)的时候,
    JVM会将该类(Demo.class)加载到方法区,
    会将该类的常量(只有程序结束时才会被回收)扫描到常量池(值+地址)中,
    JVM调用main方法(在栈中开辟空间),
    在堆中新建数组对象(连续空间),里面的元素存放存放常量地址,
    main方法中的引用(比如String[] str)存放数组对象的地址

  2. 一维数组动态初始化内存图

    一维数组动态初始化内存图

小结:

​ 当使用某个类(方法区中,只有程序结束时才会被回收)的时候,

​ JVM会将该类(Demo.class)加载到方法区,

​ 会将该类的常量(只有程序结束时才会被回收)扫描到常量池(值+地址)中,

​ JVM调用main方法(在栈中开辟空间),

​ 在堆中新建数组对象(连续空间),里面的元素由系统自动分配(比如null),

​ main方法中的引用(比如String[] str)存放数组对象的地址,

会将该类(Demo.class)加载到方法区,

​ 会将该类的常量(只有程序结束时才会被回收)扫描到常量池(值+地址)中,

​ JVM调用main方法(在栈中开辟空间),

​ 在堆中新建数组对象(连续空间),里面的元素由系统自动分配(比如null),

​ main方法中的引用(比如String[] str)存放数组对象的地址,

​ 当赋值时,将数组中对应下标的元素替换为常量池中的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拖把湛屎,戳谁谁死

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值