学习目标:

掌握一维数组的使用

学习内容:

1、一维数组的定义
数组(Array),是把具有 相同类型 的多个常量值 有序组织 起来的一种数据形式。这些按一定顺序排列的多个数据称为数组。而数组中的每一个常量值称之为数组元素(item),数组中使用索引/下标(index)来表示元素存放的位置,索引从0开始,步长是1,有点像Excel表格的行号。

数组在内存中是一段连续的内存空间

2、一维数组的语法

数组元素类型[] 数组名;   如:int[] ages;
另一种方式:int ages[]; 不推荐

理解:

  1. 可以把int[]看成是一种数据类型——int类型的数组类型。
  2. int[] 数组可以看出,该数组中的元素类型是int类型的。
  3. String[] 数组可以看出,该数组中的元素是String类型的。

3、一维数组的初始化

数组在定义后,必须初始化才能使用。所谓初始化,就是在堆内存中给数组分配存储空间,并为每一个元素赋上初始值,数组初始化有两种方式:
1> 静态初始化;
2> 动态初始化;
数组的长度是固定的,无论以哪种,一旦初始化完成,数组的长度(元素的个数)就固定了,不能改变,除非重新对该初始化。
如果我们事先知道元素是多少,选用静态初始化,事先不知道元素是多少,选用动态初始化。

  • 3.1、一维数组的静态初始化

程序员直接为每一个数组元素设置初始化值,而数组的长度由系统(JVM)决定。

  1. 初始化语法:
数组元素类型[] 数组名 = new 数组元素类型[]{元素1,元素2,元素3,.......};
如:int[] nums = new int[]{1,3,5,7,9}; 简单写法:
int[] nums = {1,3,5,7,9}; // 简单写法,定义和初始化必须同时写出来s
  • 3.2、一维数组的动态初始化

程序员只设置数组元素个数,而数组的元素的初始值由系统(JVM)决定。开发者可以提前把数组内存空间申请好,然后再程序运行过程中添值。

  1. 初始化语法:
数组元素类型[] 数组名 = new 数组元素类型[length];
// 例如
int[] nums = new int[5];
  1. 不同数据类型的初始值:

    例如:
    int[] arr1 = new int[3]; int类型数组,每一个元素的初始值为0
    double[] arr2 = new double[5]; double类型数组,每一个元素初始值为0.0
    String[] arr3 = new String[2]; String类型数组,每一个元素的初始值为null

注意 : 不能同时指定元素值和数组长度,反例如下:

int[] nums = new int[5]{1,3,5,7,9}; //错误写法

4、数组的操作

4.1、数组的基本操作

  1. 定义一个数组:
int[] nums = new int[]{1,3,5,7};
  1. 获取数组长度,语法:int size = 数组名.length;
int size = nums.length;         // 输出结果4
  1. 获取元素值,语法:元素类型 变量名 = 数组名[index];
    数组的索引从0开始,最大索引值是数组长度-1,那么索引范围是 [ 0,数组名.length - 1 ]。
 // 获取第一个元素:
intele1 = nums[0]; // 输出1
// 获取第二个元素:
intele2 = nums[1]; // 输出3
// 获取第四个元素:
intele4 = nums[3]; // 输出7
  1. 设置元素值,语法:数组名[index] = 值;
// 设置第二个元素值
nums[1] = 30;
// 获取第二个元素
int ele2 = nums[1]; // 输出结果为30

4.2、循环遍历数组

  1. for循环遍历数组

代码如下:

int[] nums = new int[] { 1, 3, 5, 7 };
for (int index = 0; index < nums.length; index++) {
int ele = nums[index];
//index依次是 0、1、2、3
System.out.println(ele);
}

运行结果:

1
3
5
7 Process finished with exit code 0
  1. 使用for-each(增强for循环)操作数组
// for-each语法
for(数组元素类型 变量: 数组){ //TODO }

代码如下:

// 使用for-each操作数组更简单,因为可以不关心索引,其底层原理依然是上述的for循环操作数组。
int[] nums = new int[] { 1, 3, 5, 7 };
for (int ele : nums) {
System.out.println(ele);
}

运行结果:

1
3
5
7 Process finished with exit code 0

5、数组的常见异常

  1. NullPointerException
    空指针异常(空引用异常)操作了一个尚未初始化或者没有分配内存空间的数组
  2. ArrayIndexOutOfBoundsException
    数组的索引越界异常,操作的数组的索引不在[0,数组名.length-1]范围内

总结:

以上就是一维数组的详细知识点了,二维数组可以看我下一篇文章。

Java中数组的定义与使用(代码+例子)的更多相关文章

  1. C和Java中数组的定义

    在学习C和Java中,关于数组的定义两者不同,在初学的时候,容易产生混淆,现在将两者对比下. 1.初始化 在C语言中,关于一维数组的定义: 完全初始化  int a[5]={1,2,3,4,5},对于 ...

  2. Java中数组的定义方式

    数组定义方式一 动态方式(指定数组的长度) 格式: 数组存储的数据类型[]数组名字 = new 数组存储的数据类型[长度]; [] : 表示数组. 数组名字:为定义的数组起个变量名,满足标识符规范,可 ...

  3. java中数组的定义

    1. 一维数组 int[] arr = new int[3];//需要一个容器,但是暂时不给具体的数值 int[] arr = new int[3]{1,2,3};//直接给定具体数值 int[] a ...

  4. Java中数组的定义,初始化和使用

    定义:数组是数据类型相同的,用一个标志符名称封装在一起的一个对象序列或基本类型数据序列(一组相同数据类型元素的集合,并且分配一块连续的内存来存储). 格式:int[] a1(常用)  或者 int a ...

  5. c语言中数组的定义和java中数组定义的一些区别

    感谢原文:https://blog.csdn.net/gzwdz778/article/details/79799408 一维情况下: c中,数组的声明需要给出数组的维数,比如: int arr[5] ...

  6. Java中数组的特性

    转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613 数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具 ...

  7. Java中数组的创建

    Java中数组的使用 1.普通数组变量的定义: //数组 //1.数组是Java中很重要的一部分,今天对数组进行了大致的了解,Java中的数组和C中数组还是有一定的区别的 //以下是总结的几种方法 p ...

  8. JAVA中数组的基本概念与用法

    JAVA中数组的基本概念与用法 1. 数组的定义与特点 数组的一种引用数据类型 数组中可以同时存放多个数据,但是数据的类型必须统一 数组的长度在开始时就需要确定,在程序运行期间是不可改变的 虽然可以使 ...

  9. java中数组的相关知识

      1. 2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages; ages=new int[5]; 3)int[]ags={1,2,3,4,5}; 4)int[ ...

随机推荐

  1. VUE3 之 多个元素之间的过渡 - 这个系列的教程通俗易懂,适合新手

    1. 概述 老话说的好:过去不等于未来,过去成功了不代表将来也会成功,过去失败了也不代表将来也会失败. 言归正传,今天我们聊聊多个元素之间的过渡. 2. 多个元素之间的过渡 2.1 两个元素交替显示 ...

  2. CAS 比较并交换

    简介 CAS 的全称为 Compare-And-Swap,他是一条 CPU 并发源语. 他的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的. CAS 并发原语体现在 J ...

  3. 【.NET6+WPF+Avalonia】开发支持跨平台的WPF应用程序以及基于ubuntu系统的演示

    前言:随着跨平台越来越流行,.net core支持跨平台至今也有好几年的光景了.但是目前基于.net的跨平台,大多数还是在使用B/S架构的跨平台上:至于C/S架构,大部分人可能会选择QT进行开发,或者 ...

  4. 『现学现忘』Docker基础 — 25、Docker镜像讲解

    目录 1.镜像是什么 2.Docker镜像获取的方式 3.Docker镜像加载原理 (1)UnionFS(联合文件系统) (2)Docker镜像加载原理 1.镜像是什么 镜像是一种轻量级.可执行的独立 ...

  5. linux signal-list

    [root@bogon ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) ...

  6. Net6 Configuration & Options 源码分析 Part2 Options

    Net6 Configuration & Options 源码分析 Part2 Options 第二部分主要记录Options 模型 OptionsConfigurationServiceCo ...

  7. Java案例——冒泡排序

    排序:将一组数据按照固定的规则进行排列 冒泡排序:一种排序方式,对将要排序的相邻的数据进行两两比较,将较大的放在后面,依次对所有的数据进行操作,直到所有的数据按要求完成排序 冒泡排序原理: 1.如果有 ...

  8. xilinx SDK在线仿真_烧写 提示失败

    1.找到工程目录下的Binaries->xxx.elf-[arm/le] . 2.右击该elf,选择Debug As->Debug Configurations... 进入设置界面. 3. ...

  9. 使用MEF应用IOC(依赖倒置)

    MVC实用架构设计(二)--使用MEF应用IOC(依赖倒置)   前言 在<上篇>中,基本的项目结构已经搭建起来了,但是有个问题,层与层之间虽然使用了接口进行隔离,但实例化接口的时候,还引 ...

  10. Arduino UNO开发板、Arduino CNC Shield V3.0扩展板、A4988驱动板、grbl固件使用教程

    前言 CNC Shield V3.0可用作雕刻机,3D打印机等的驱动扩展板,板上一共有4路步进电机驱动模块的插槽,可驱动4路不进电机,而每一路步进电机都只需要2个IO口,也就是说,6个IO口就可以很好 ...