055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念

本文知识点:数组的概念

数组的声明创建、初始化

在学习数组的声明创建、初始化前,我们可以和之前的变量的声明创建、初始化进行对比来学习。

那我们来看一下数组的声明,先来看一下语法格式。

数组的声明

数组声明语法格式1

数组声明格式1:

数据类型 [] 数组名;

变量声明格式:

数据类型 变量名;

数组声明相比变量声明,在数据类型后增加了一个中括号。而数组名的命名规则和变量名的命名规则是一致的。它本身是一个标识符,要满足标识符的命名规则。并且像变量名一样,如果数组名是由一个单词组成的,所有字母都是小写的。如果由多个单词组成的,第一个单词全部小写,从第二个单词开始,首字母全部大写。

数组声明语法格式2

数组声明格式2:

数据类型 数组名 [];

说明一下,为什么数组声明有这两种形式:

因为其他的编程语言,比如说C语言,C++,大家都是把中括号写在数组名的后面(即和我们学习的Java数组声明语法格式2相同)。Java为了和其他编程语言进行区分呢,Java就创建了自己的命名方式。就是把中括号写在数据类型的后面(数组声明语法格式1)。那么,第一种数组声明的语法格式才是我们在Java进行数组声明的时候,常用的形式。

案例练习如何声明数组——使用2种语法格式

声明一个整型数组如下:

int [] myIntArray ;

int myIntArray [];

以上两种声明方式都是正确的。

当然,如果你要生成其他类型的数组呢,就把相应的数据类型的名称进行改变即可。比如我们生成一个char类型的数组、生成字符串String类型的数组。

记住:字符串本身是一个类。这块内容后续我们学习面向对象的内容后,就知道了。借助类可以创建对象,所以String作为一个类,创建String类型的数组就是对象数组

以上是数组的声明。

然后我们看下数组的创建。

数组的创建

数组创建形式1:

先声明、后创建

1、先去声明一个数组

2、再去创建数组

如何创建呢?数组创建形式1:

数组名 = new 数据类型[数组长度];

new是一个关键字,在后面的面向对象程序中呢,我们会遇到很多次new,new关键字其实是在创建一个对象。目前我们先知道有这个概念即可。对于数组问题,我们知道new是在创建数组即可。

例题:声明并创建一个长度为10的整型数组:

int [] arr;//声明数组
arr = new int[10];//创建数组

数组创建形式2:

声明数组的同时创建数组:

这个类似变量的初始化,但是数组中不叫初始化,稍后我们对初始化的内容进行演示。

数组创建形式2:

数据类型 [] 数组名 = new 数据类型[数组长度];

注意:

1、创建数组时,数组长度必须被指定,如果没有指定,是错误的。

2、声明时(赋值号=)左边的中括号写在数组名之前、数组名之后都是正确的。

数组在内存中的存储

我们前面学习变量的时候学习了:定义一个变量之后,变量就会在内存中存储。同样地,定义数组之后,也会在内存中分配内存空间,用来存储数组中的数据。而数组比较特别的一点是:数组在内存中分配的,肯定是一段连续的内存空间

比如,我们定义一个整型的数组a:

int [] a = new int [5];

a是一个长度为5的整型数组,会在内存中开辟一块连续的内存空间。并且数组的默认值,对于整型数组来说,它的默认值都是0。所以我们知道,在这片连续的内存空间当中,每个数组元素的值都为0。就是说,长度为5的数组,它肯定有5个元素。那么这5个元素,它的每一个元素的元素值都是0。而我们的数组名本质是一个对象(数组是引用数据类型,即类类型,类创建的就是对象),它(数组名)是指向数组的第一个元素。这点在后面进行方法传值的时候是非常重要的。

这是数组的存储形式,需要注意的是:

数组的数组元素都有默认的元素值。后面我们会学习,其他数据类型创建的数组的数组元素的默认值都是什么!

这里,我们在强调一点,即局部变量。局部变量(在主方法中、在循环中我们学习的)都是没有默认值的。我们之前遇到过类似的问题,我们需要给局部变量进行赋值的。但是数组是有默认值的。因为数组的本质是对象

数组的初始化

初始化的定义:声明的同时给变量赋值

我们前面看到的new 数据类型[数组长度]; 不叫初始化,而叫做创建对象。



注意:

1、元素之间用逗号分隔(英文逗号)

2、整个代码书写都必须是在英文输入法状态之下的 否则,会报错。

上面的问题也是初学者经常会犯的错误。

那么数组长度是什么呢?数组长度:数组初始化时所给元素的个数,即为数组长度

比如上面的例子中:

int [] arr = {1,2,3,4,5,6,7,8,9,10};

从1到10共计10个元素,那么数组长度就是10。

接下来,我们再看一下数组元素的引用

数组元素的引用

前面提到过了,总说定义长度为10的数组,那么对于数组当中的每一个元素是如何进行表示的呢?

我们来看一下语法格式:

数组名[数组元素下标]

这里面,注意一下,数组元素下标是整型的数字,并且数组元素下标是从0开始的,其实整个“数组名[数组元素下标]“ 这样一个整体, 我们可以把这个整体看做是一个变量名

我们看一下数组元素的引用的一个图例。

int [] a = {1,2,3,4,5,6,7,8,9,10};

10个元素对应10个连续的内存空间中。注意:数组一定是存放在连续的内存空间中。

我们把:

第1个元素表示为a[0], 注意,数组下标从0开始。

第2个元素表示为a[1]

第3个元素表示为a[2]

……

第10个元素表示为a[9]

这就类似变量和变量值之间的对应关系。比如,我们定义一个变量n:

int n = 10;

那么,n是变量名,10是变量值。同样的,a[0]表示数组a给1个位置处的数组元素起的名字,所以,我们说可以把a[0]这个整体看做一个变量名。而它所对应的值就是1。

数组元素引用的问题中,始终要记得:数组元素下标是从0开始。重要的事我已经说了三遍,不行你回顾文章数一数。

数组的长度

上面数组初始化的时候提过,数组长度就是数组元素的个数

在数组中,还有一个属性 ,叫做length。length属性是表示数组长度的。如何使用属性呢?

使用格式:

数组名.length

使用方法类似我们前面从键盘接收数据时用到的sc.nextInt(); nextInt()有括号,而length属性没有括号。因为nextInt()是方法,需要括号。而length是属性,不需要括号。这些后面面向对象的知识会涉及到,现在有个了解就好了。(其实都是引用数据类型,对象引用属性或者对象饮用方法的形式)

Scanner sc = new Scanner(System.in);
sc.nextInt();

055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念的更多相关文章

  1. # 095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 03 封装总结 01 封装知识点总结

    095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  2. 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)

    094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  3. 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)

    093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  4. 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)

    092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  5. 091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 01 static关键字(上)

    091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  6. 090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 04 使用包进行类管理(2)——导入包

    090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  7. 089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 使用包进行类管理(1)——创建包

    089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  8. 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现

    088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...

  9. 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点

    087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...

随机推荐

  1. vue 在模板template中变量和字符串拼接

    例子:  :post-action="'/api/v1/reportPage/'+this.selectedPagerId+'/saveimg/'"

  2. LoadRunner回放脚本遇到的问题(遇到就补上)

    问题一:Error-26612:HTTP Status-code=500(Internal Server Error) 解决过程:google找到了关于这个错误有多种解决的方法,但是都不是我要的,最重 ...

  3. [PyTorch 学习笔记] 5.2 Hook 函数与 CAM 算法

    本章代码: https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson5/hook_fmap_vis.py https://gi ...

  4. Mybatis参数传递及返回类型

    mybatis参数传递: 单个参数:不做特殊处理        #{参数名}:取出参数值    多个参数:做特殊处理        多个参数会被封装成一个map            key:para ...

  5. PyTorch ResNet 使用与源码解析

    本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson8/resnet_inference.py 这篇文章首先会简 ...

  6. Linux 用户与权限

    这些天一直在看Linux的命令但是却没有写文章,因为感觉没有必要,哪些简单的命令,vi cat cd 啥的,是个做开发的就知道,所以就没写; 用户管理 第一个我们知道的用户就是Root 没错哦,这就是 ...

  7. Spring security OAuth2.0认证授权学习第一天(基础概念-认证授权会话)

    这段时间没有学习,可能是因为最近工作比较忙,每天回来都晚上11点多了,但是还是要学习的,进过和我的领导确认,在当前公司的技术架构方面,将持续使用Spring security,暂不做Shiro的考虑, ...

  8. 利用ANSI转义序列在控制台输出彩色文字

    说明:无论什么语言,只要你的终端能够解释ANSI转义序列(大多数的类unix终端仿真器都能够解释ANSI转义序列,win32控制台则不支持),就能够使用ANSI转义序列输出颜色.这个功能看似鸡肋,但只 ...

  9. iptables防火墙说明即使用

    防火墙是架设在公网和私网之间的服务器,隔离公网和私网,保护私网. RHEL7默认使用firewalld作为防火墙. 但firewalld底层还是调用包过滤防火墙iptables #systemctl ...

  10. Kubernetes K8S之Pod跨namespace名称空间访问Service服务

    Kubernetes的两个Service(ServiceA.ServiceB)和对应的Pod(PodA.PodB)分别属于不同的namespace名称空间,现需要PodA和PodB跨namespace ...