目录

1. 数组基础

1.1 创建数组

1.2 使用数组

2. 数组的"名"与"实"

2.1 数组的"名"

2.2 数组的"实"

3. 多维数组

3.1 定义多维数组

3.2 理解多维数组


1. 数组基础

1.1 创建数组

int studentCount = 5;
// 声明一个int类型数组
int[] students;
// 创建一个有5个int类型成员的数组,并赋值给students
students = new int[5];

说明1:创建数组时,可以用变量指定数组长度,所以也可以用如下方式创建数组

students = new int[studentCount];

说明2:创建数组时,长度必须是非负数,Java中允许创建长度为0的数组,该数组没有实际用处

students = new int[0];

说明3:为了简洁,可以将数组的声明、定义和赋值合并为一行

int[] students = new int[5];

1.2 使用数组

数组中元素有固定的顺序,每个元素有一个固定的编号(即数组下标 / 索引),我们通过索引使用数组中的元素

int[] students = new int[5];
students[0] = 99;

说明1:数组下标从0开始

说明2:越界访问在运行时将报错,编译时不会报错

说明3:通过数组变量.length可以获得数组长度

length是数组类的属性

说明4:Java在创建数组时,会根据数组元素的类型给其中的每个元素赋初值

① 数值相关的基本类型,初始值为0

② char类型,初始值为nul字符

③ boolean类型,初始值为false

说明5:数组一旦创建,长度不可改变

说明6:创建数组的另一种语法

int[] students = {55, 66, 77, 88, 99};

使用该语法时,必须在一个语句中完成数组的声明、创建和赋值

指定初始化式也可按如下方式使用

int[] students = new int[]{55, 66, 77, 88, 99};

注意:使用上面这种方式定义数组时,不能在使用初始化式的同时指定数组维数

2. 数组的"名"与"实"

2.1 数组的"名"

声明一个数组就是创建一个数组类型变量,也就是数组的名字,此时并没有创建数组

int[] students;

如上例,此时直接使用students变量会报错,

2.2 数组的"实"

通过new关键字才是真正创建一个数组,并通过赋值建立如下的关系,

说明1:与C语言数组的对比

int students[10];

C语言在定义数组时,同时就分配了内存;因此Java的语法在本质上更类似C语言中的动态内存分配

int *students;
students = (int *)malloc(5 * sizeof(int));

说明2:Java中所有非基本类型都是名实分离的

说明3:由于数组的名实分离,所以可以有多个数组变量指向同一个数组

int[] students = new int[5];
int[] studentsSame = students;

此时students & studentsSame操作的是同一个数组

3. 多维数组

3.1 定义多维数组

定义多维数组只需要增加数组的维度,以二维数组为例,

int[][] gradeStudents = new int[2][5]; // 2个班级,每个班级5名学生
gradeStudents[0][4] = 88;

说明:多维数组也可以有维度为0,又因为多维数组中的元素个数是以乘积的方式计算的,所以一旦其中有一个维度的大小为0,则整个多维数组就是空数组

空的多维数组也是没有实际用途的

3.2 理解多维数组

多维数组可以理解为是由数组变量的数组和一维数组组成的一个混合体,以二维数组为例,gradeStudent[0]就是一个一维数组变量,他指向一个一维数组

说明1:由于gradeStudents[0]是一个一维数组变量,所以可以使用相同类型的数组变量指向他所指向的数组

int[][] gradeStudents = new int[2][5];
int[] classOne = gradeStudents[0];

说明2:同样由于gradeStudents[0]是一个一维数组变量,我们也可以修改其指向

int[][] gradeStudents = new int[2][5];
int[] classTwo = new int[6];
gradeStudents[1] = classTwo;

该示例有2点值得说明,

① Java中的数组变量可以指向任何长度的数组,所以gradeStudent[1]原先指向有5个元素的数组,之后可以修改为指向6个元素的数组

② 修改了gradeStudent[1]的指向后,其原先指向的一维数组就无法再访问了

此处可见Java中数组与C语言中存储方式的不同,本质上还是通过动态内存分配实现,二维数组更像是指针数组,其中的每个指针又指向实际的一维数组

int *gradeStudents[2];
gradeStudents[0] = (int *)malloc(sizeof(int) * 5);
gradeStudents[1] = (int *)malloc(sizeof(int) * 5);
// 此时也可以通过如下方式访问数组成员
gradeStudents[0][1] = 99;

说明3:三维数组的扩充

根据之前的说明,多维数组是由一级级的一维数组组成,在这个层次中,除了最后一层是真正由数组元素构成,其余数组均为数组变量数组

int[][][] allStudents = new int[5][25][55];

说明4:多维数组也可以指定元素初始化

int[][] gradeStudents = {{0, 0, 0}, {0, 0, 0}};

此处初始化的是一个int[2][3]的二维数组

Java程序设计语言基础04:数组相关推荐

  1. Java程序设计语言基础01:绪论

    目录 1. 初探HelloWorld程序 1.1 类(Class)语法元素 1.2 main方法(main method)语法元素 1.3 System.out.println 1.4 字符串 2. ...

  2. Java程序设计语言基础05:Java的类和对象

    目录 1. 类的定义与组成 1.1 类的定义 2.2 类的使用 2. 类.对象和引用 2.1 类 2.2 对象 2.3 引用 3. 类的知识扩展 3.1 成员变量初始值 3.2 在类中定义自己的引用 ...

  3. Java程序设计语言基础02:Java中的基本数据类型和运算符

    目录 1. Java中的基本数据类型 1.1 概述 1.2 基本数据类型的值域 1.2.1 byte类型 1.2.2 short类型 1.2.3 int类型 1.2.4 long类型 1.2.5 fl ...

  4. Java程序设计语言基础03:Java中的程序执行流程

    目录 1. 简记部分 1.1 条件与循环 1.2 switch语句 1.3 continue与break 2. 变量的作用域 3. 从标准输入读取数据 4. 生成随机数 1. 简记部分 1.1 条件与 ...

  5. Python程序设计语言基础04:程序的控制结构

    目录 1. 程序的分支结构 1.1 单分支结构 1.2 二分支结构 1.3 多分支结构 1.4 条件判断及组合 1.4.1 条件判断 1.4.2 条件组合 2. BMI计算实例 3. 程序的循环结构 ...

  6. Java程序设计语言(基础篇)机械工业出版社 原属第10版

    链接:https://pan.baidu.com/s/1txoB3sk0SdT1u8RpS2x-Kg  提取码:rxkd  Java程序设计语言(基础篇)机械工业出版社 原属第10版 外加一本Java ...

  7. 计算机浙大网java网站,网络课程—非计算机专业JAVA程序设计语言

    <非计算机专业JAVA程序设计语言> 一.主要目标和主要内容: 该课程面向全校非计算机专业理工类本科生,是程序设计语言类必修的公共基础课之一.该课程的前导课程是<大学计算机基础> ...

  8. c++把数组所有元素剔除_C语言基础之数组,第一节,C语言必学知识点剖析

    本文约1600字,主要讲了C语言基础之数组.数组又可分为数值数组.字符数组.指针数组.结构数组等各种类别.本文主要讲了数组的基础概念,一维数组的定义和引用. 带你进入C语言的世界,入门C语言,后边将持 ...

  9. 程序设计语言基础-知识点

    程序设计语言基础-知识点 程序设计语言就是人类跟计算机沟通的语言 分类 1.高级低级之分 高级 c/c++,java 等 低级 机器语言 汇编等 2.工作方式之分 编译程序:编译成目标程序后再执行.c ...

最新文章

  1. libtool的工作原理
  2. Opengl-实例化(不知道为啥叫实例化,感觉应该叫一次批量渲染)
  3. 开发笔记7 | 部署 Go 应用程序到阿里云 ECS
  4. 运行SSIS包的几种方式
  5. MFC模态窗口与非模态窗口
  6. 从编程小白到全栈开发:服务的调用
  7. android map 多线程,Android多线程(一)
  8. 基于Springboot+websocket的web聊天项目(论文+程序设计源码+数据库文件)
  9. java 问题 无法解析类型 java.lang.CharSequence。从必需的 .class 文件间接引用了它
  10. 三级联动(原生js)
  11. 数理统计实(试)验—双因素方差分析(有交互作用)excel操作分析方差分析表怎么看?
  12. linux 查看vcf文件,VCF格式文件的shell小练习
  13. win10网页找不到服务器dns,找不到服务器或DNS错误怎么办
  14. JavaWeb前端: JavaScript 简介
  15. 这几年爆火的智能物联网(AIoT),到底前景如何?
  16. HTML实现一个简单的图片自动显示特效
  17. 天津大学计算机专硕_天津大学计算机技术专硕考研参考书
  18. neovim安装 vim-plug插件管理器安装
  19. Java的静态类详解
  20. 创意自画像及简单交互

热门文章

  1. springboot mvc html,完美起航-SpringBoot整合MVC
  2. OAuth2.0资源服务器之校验Token配置
  3. MySQL 基准测试(mysqlslap)出现 Using a password on the command line interface can be insecure 警告
  4. windows10杀死本地进程
  5. html5+php调用android手机图片,HTML5拍照上传图片Phonegap封装HTML5调用Android相机拍照上传到PHP端...
  6. msql查询姓名不带r的员工姓名_java基础之MySQL多表查询2
  7. 高速信号传输约翰逊 pdf_智芯文库 | 高速数字电路的设计与仿真
  8. Mysql和Oracle如何计算QPS和TPS
  9. Oracle数据库为何出现乱码
  10. python打包和添加数据文件_Python打包时添加非代码文件的坑