2026/1/8 0:37:40
网站建设
项目流程
校园网站建设划分vlan,网站建设如何快速增加用户,北京pk10做号网站,注册空壳公司帮人走账个人主页 文章目录 前言#xff1a;1. 数组是什么1.1 数组的特性1.2 数组的内部结构1.3 数组的分类1.4 数组与集合的区别 2. 数组的定义2.1 数组的数学概念2.2 数组的索引机制2.3 数组的边界概念 3. 数组的声明与创建3.1 数组的声明方式3.2 声明与初始化的时机3.3 数组的创建3…个人主页文章目录前言1. 数组是什么1.1 数组的特性1.2 数组的内部结构1.3 数组的分类1.4 数组与集合的区别2. 数组的定义2.1 数组的数学概念2.2 数组的索引机制2.3 数组的边界概念3. 数组的声明与创建3.1 数组的声明方式3.2 声明与初始化的时机3.3 数组的创建3.3.1 使用new关键字创建3.3.2 使用数组初始化器创建3.4 数组创建的详细过程3.5 不同类型数组的默认值3.6 数组大小限制3.7 数组的类型安全3.8 数组与泛型的关系3.9 数组的初始化顺序3.10 数组的声明与创建实践3.11 示例4. 结尾前言本文将想你介绍数组是什么数组的定义数组的声明创建。希望这对你有帮助。1. 数组是什么数组是Java中最基本的数据结构之一它是一个容器对象用于存储固定数量的相同类型的元素。数组在内存中是连续存储的这使得通过索引访问元素的速度非常快。1.1 数组的特性Java数组具有以下几个重要特性固定长度数组一旦创建其长度不可改变类型一致性数组只能存储相同类型的数据索引访问通过从0开始的索引访问元素连续内存数组元素在内存中连续存储对象特性数组在Java中是对象继承自Object类1.2 数组的内部结构从内存角度来看数组在Java虚拟机中的存储结构包含以下几个部分数组对象头包含数组的元数据信息如长度、类型等数据区域存储实际的数组元素对齐填充可能存在的填充字节确保内存对齐// 数组内存结构示意图/* ┌─────────────────────────────────────┐ │ 数组对象头 │ │ - 标记字 (Mark Word) │ │ - 类型指针 (Class Pointer) │ │ - 数组长度 (Array Length) │ ├─────────────────────────────────────┤ │ 数据区域 │ │ 元素[0] 元素[1] 元素[2] ... │ ├─────────────────────────────────────┤ │ 对齐填充 (可选) │ └─────────────────────────────────────┘ */1.3 数组的分类Java数组可以分为以下几类基本类型数组如int[]、char[]、double[]等对象数组如String[]、Integer[]、自定义对象数组等多维数组二维数组、三维数组等1.4 数组与集合的区别虽然数组都是集合框架的一部分但它们有一些重要区别特性数组集合长度固定可变类型基本类型和对象类型仅对象类型性能访问速度快O(1)根据具体实现而定功能基础功能丰富的方法和算法泛型支持不支持支持2. 数组的定义数组是一种数据结构它包含一组相同类型的元素这些元素在内存中连续存储。每个元素可以通过索引从0开始来访问和修改。2.1 数组的数学概念从数学角度来看数组可以看作是一个有限序列或向量A [a₀, a₁, a₂, ..., aₙ₋₁]其中A表示数组aᵢ表示数组的第i个元素n表示数组的长度i的取值范围是0 ≤ i n2.2 数组的索引机制数组使用从0开始的索引机制这是计算机科学中的常见约定// 索引与元素的对应关系int[]array{10,20,30,40,50};/* 索引: 0 1 2 3 4 元素: 10 20 30 40 50 */// 访问第一个元素intfirstarray[0];// 10// 访问最后一个元素intlastarray[array.length-1];// 502.3 数组的边界概念数组的边界是指有效索引的范围下边界0包含上边界length - 1包含int[]arraynewint[5];/* 有效索引范围0, 1, 2, 3, 4 无效索引-1, 5, 6, ... */3. 数组的声明与创建3.1 数组的声明方式Java提供了三种数组声明方式// 方式一推荐使用int[]array1;// 方式二C语言风格不推荐intarray2[];// 方式三声明多个数组int[]array3,array4,array5;// 方式四混合声明不推荐intarray6[],array7;// array6是数组array7是int变量最佳实践推荐使用第一种声明方式int[] array1因为它更清晰地表明变量是一个数组类型。3.2 声明与初始化的时机数组可以在不同的时机进行声明和初始化publicclassArrayDeclaration{// 成员变量声明privateint[]memberArray;publicArrayDeclaration(){// 构造函数中初始化memberArraynewint[10];}publicvoidmethod(){// 局部变量声明和初始化int[]localArraynewint[5];// 分步声明和初始化int[]stepArray;stepArraynewint[3];}}3.3 数组的创建数组创建有两种方式3.3.1 使用new关键字创建// 创建指定长度的数组int[]numbersnewint[5];// 创建长度为5的int数组默认值为0// 创建并初始化数组String[]namesnewString[]{张三,李四,王五};// 分步创建double[]scores;scoresnewdouble[10];// 长度为10的double数组默认值为0.0// 使用变量指定长度intsize8;int[]dynamicnewint[size];3.3.2 使用数组初始化器创建// 简化语法只能在声明时使用int[]primes{2,3,5,7,11,13,17,19};// 匿名数组String[]weekdaysnewString[]{周一,周二,周三,周四,周五};// 多维数组初始化int[][]matrix{{1,2,3},{4,5,6},{7,8,9}};3.4 数组创建的详细过程当我们创建一个数组时Java虚拟机会执行以下步骤类型检查验证数组类型是否合法内存分配在堆内存中分配连续空间初始化将数组元素设置为默认值引用返回返回数组对象的引用// 创建数组的详细过程分析int[]arraynewint[5];/* 步骤1检查int[]是否为有效类型 步骤2在堆内存中分配 5 × 4 20 字节的连续空间 步骤3将所有元素初始化为0 步骤4将数组引用赋值给array变量 */3.5 不同类型数组的默认值数组类型默认值字节大小byte[]01short[]02int[]04long[]0L8float[]0.0f4double[]0.0d8char[]‘\u0000’2boolean[]false1实际可能占用更多对象数组null4或8取决于JVM3.6 数组大小限制Java数组的大小受到以下限制// 数组大小的理论限制intmaxSizeInteger.MAX_VALUE;// 2^31 - 1 2,147,483,647// 实际限制取决于可用内存// 例如int数组的最大元素数量约为 2^31 - 1// 但实际可用内存可能更小// 测试数组大小限制try{int[]largeArraynewint[Integer.MAX_VALUE];}catch(OutOfMemoryErrore){System.out.println(数组太大内存不足);}3.7 数组的类型安全Java数组提供编译时类型检查// 类型安全的数组操作int[]intArraynewint[5];String[]stringArraynewString[5];// 编译时类型检查// intArray[0] hello; // 编译错误类型不匹配// 运行时类型检查Object[]objArraynewString[5];// objArray[0] new Integer(10); // 运行时错误ArrayStoreException3.8 数组与泛型的关系数组和泛型之间存在一些重要的限制// 不能创建泛型数组// ListString[] stringLists new ListString[10]; // 编译错误// 可以使用通配符List?[]wildcardListsnewList?[10];// 可以创建参数化类型的数组引用ListString[]stringListRefsnewArrayList[10];// 警告但允许3.9 数组的初始化顺序数组的初始化遵循特定的顺序publicclassArrayInitialization{// 静态数组初始化privatestaticint[]staticArray{1,2,3};// 实例数组初始化privateint[]instanceArray{4,5,6};publicArrayInitialization(){// 构造函数中的数组初始化int[]constructorArray{7,8,9};}publicstaticvoidmain(String[]args){// 局部数组初始化int[]localArray{10,11,12};}}3.10 数组的声明与创建实践使用推荐的声明方式int[] array而不是int array[]避免魔法数字使用常量或变量指定数组大小及时初始化避免使用未初始化的数组引用考虑使用集合当需要动态大小时考虑使用ArrayList注意内存限制避免创建过大的数组导致内存溢出3.11 示例importjava.util.Arrays;publicclassArrayExample{// 常量定义privatestaticfinalintDEFAULT_SIZE5;// 成员变量数组privateint[]memberArray;publicArrayExample(){// 构造函数中初始化成员数组memberArraynewint[DEFAULT_SIZE];// 初始化数组元素for(inti0;imemberArray.length;i){memberArray[i](i1)*10;}}publicvoiddemonstrateArrayCreation(){// 方式一声明后创建int[]array1;array1newint[5];// 方式二声明并创建int[]array2newint[5];// 方式三声明并初始化int[]array3{10,20,30,40,50};// 方式四使用new关键字初始化String[]namesnewString[]{张三,李四,王五};// 方式五动态大小数组intsize8;int[]dynamicArraynewint[size];// 访问和修改数组元素array1[0]100;array1[1]200;// 获取数组长度intlengtharray1.length;System.out.println(数组长度length);// 遍历数组System.out.println(遍历array1);for(inti0;iarray1.length;i){System.out.println(索引i的值array1[i]);}// 使用增强for循环遍历System.out.println(遍历array3);for(intvalue:array3){System.out.println(值value);}// 使用Arrays工具类System.out.println(array3的内容Arrays.toString(array3));System.out.println(names的内容Arrays.toString(names));// 访问成员数组System.out.println(成员数组Arrays.toString(memberArray));}publicstaticvoidmain(String[]args){ArrayExampleexamplenewArrayExample();example.demonstrateArrayCreation();}}4. 结尾掌握数组的基本概念为后续学习更复杂的数据结构和算法奠定了基础。⭐ 如果这对你有帮助不妨收藏和分享一下