上一篇我们留了一道作业题,就是怎么在main方法里不用new对象的方式来调用另外两个方法,这里我就不给搭理事例了,简单的说一下,static方法中如果想直接调用某个方法,非new出来对象再调用这个对象的方法的话,只能调用同样为static的方法,也就是说,我们的那个例子里面,只要将setIntValue和getIntValue 方法都改成static的就可以了,大家自己试试;
今天我们要讲的内容是java的数组
在现实生活中,我们经常会遇到这样的情况,一些同类型的东西我们要把他们放在一起,比如说最进本的人,我们的班级,就是把学生这一类的对象都放在了一起,这些人的类型是相同的都是学生, 要对他们的操作也是相同的,都是传授知识,概括起来说,就是一种能够存放大量同性质的并且需要做相同的处理的数据的数据结构;就是数组;简而言之,就是具有相同数据类型的数据集合;从概念上来分析,重点是两个,1是相同数据类型,2是集合。
说道数组,我们就不得不提到维度,我们求学的时候都学习过,一维,二维,三维,用坐标系来解释就是线,面,空间,四维,五维就比较高端了。暂且不提,数组也可以按维度来划分,如果我们的数组中都是整数的话
我们来看看一维数组是什么样的:{1,2,3,4,5,6},这就是一条线上的各个点
再来看看二维数组是什么样子的:{(1,2),(3,4),(5,6)};这就是平面上的各个点
再来看看三维数组是什么样子的:{(1,2,3),(4,5,6),(7,8,9)};这就是空间中的各个点
注意,以上三个仅仅是介绍了概念,实际写法并不是这样
简单的介绍了数组的概念,下面我们进入代码的世界;
java定义变量的时候都要声明类型,这是老生常淡了,那么数组如何来声明呢?
在解决这个问题之前,我们要先解决另一个问题,就是我们要声明的是几维数据?
一切从简,先来说说一维数组的声明
数组中数据类型 数组名称 [] 或者 数组中数据类型 [] 数组名称
来仔细数说下,首先我们要申请数组中存放的数据的类型,然后是数组的名称,最后又一对中括号
比如我们要声明int类型的数组,那么如下:int a [];或者 int [] a;
这两种方式没有任何区别,看自己喜好就好
既然数组是同一类型的集合,那么有的时候我们肯定想要知道数据的长度是多少
就是 数组名.length,拿我们上面的int型数组来说,他的长度就是 a.length
注意是没有括号的,这个length是数组的一个属性,不是方法
上面我们仅仅是讲了如何声明,并没有讲如何初始化,初始化这个概念并不陌生,就是对数据进行赋初值的操作
数据的初始化有两种,可以称之为静态初始化,和动态初始化
静态初始化简单,来看个简单的例子:
public class IntCollection { public static void main(String[] args) { int [] intCol = {1,2,3,4,5}; System.out.println(intCol.length); } }
来看运行结果
这就是静态赋初值,声明数组的同时对其进行了初始化,这个例子同时也练习了length这个属性
动态初始化的例子稍微麻烦一些,我们来看看
public class IntDynamic { public static void main(String[] args) { int [] intCol = new int[10]; for(int i =0 ;i < 10; i ++){ intCol[i] = i * i; System.out.println(intCol[i]); } } }
来看这段代码,我们声明的时候使用了new int[10];因为数据是对象类型的, 所以我们可以通过new关键字来创建对象,因为数组是有长度的,所以我们声明的时候如果不是静态的初始化,那么我们需要声明数组的长度,这里我们把数组的长度声明为10,然后用for循环给数组的中的每个元素赋值,值就是i的平方
看看结果
这里我们看到给数组的元素赋值的时候使用的语句是 intCol[i] = i * i
这就有问题了,intCol[i]是什么东西?这就是数组intCol的第i个元素,这个i就是数组的下标,如果我们想直接使用数组的第5个元素,我们应该怎么写呢?intCol[5]么?如果是这样的话,那么你肯定没有注意到下面这个细节
for循环是从0开始的,也就是说intCol的第一个元素是IntCol[0] ;那么第五个元素是什么?intCol[4]就对了吧?
这里有必要提及的是,这个方括号中的数字是数组中元素的下标,其实跟for循环中的i没有必然联系,仅仅是因为for循环中i的值和数组的下标恰好相同而已,数组的下标是从0开始的,跟我们正常生活中从1开始不同,这一点一定要注意,后面还会遇到类似的情况,那么数组的最后一个元素就是 IntCol[IntCol.length - 1]
这个表达式目测已大家的高智商肯定能理解,IntCol.length是整个数组的长度,长度减1,就是最后一个元素了;
现在来一道课堂练习
要求:已知一下两个数组 int [] a = {1,2,3,4,5}; int [] b= {6,7,8,9,0}
输出数组中的每个元素,分别输出数组的长度
输出每个元素的时候
提示:数组中元素的名字可以这样来打印 "a [" + i + "]"
动起来,自己写写
看代码:
public class IntLength { public static void main(String[] args) { int [] a = {1,2,3,4,5}; int [] b = {6,7,8,9,0}; for(int i =0; i < a.length; i ++){ System.out.println("a[" + i + "] = " + a[i]); } for(int i =0; i < b.length; i ++){ System.out.println("b[" + i + "] = " + b[i]); } System.out.println("a[] 的长度为" + a.length); System.out.println("b[] 的长度为" + b.length); } }
我们的for循环使用的判断条件分别是每个数组的长度,第几个元素就是数组名[下标];长度,就是数组名.length ;这都没问题了,这里有一点不知道大家注意到了没有,我们的for循环的变量都是使用int i =0作为开始,那么这两个for循环之间会互相影响么?答案是否定的,不会,因为这两个for代码块是同级的,int i这个变量的作用范围仅限for循环打大括号中,两个for循环不会有任何影响,但是如果这两个for循环是嵌套关系的话,那么肯定就有问题了,有兴趣的同学自己试试
来看看运行结果
一维数组说完了,咱们来聊一聊二维数组
来个代码
public class TwoDimension { public static void main(String[] args) { char [] [] a = new char[4][10]; a[0] = new char[10]; a[1] = new char[10]; a[2] = new char[10]; a[3] = new char[10]; a[0][0] = 65; a[1][0] = 67; a[2][0] = 69; a[3][0] = 71; for(int i =0 ;i < a.length; i ++){ for(int j = 1; j < a[i].length; j ++){ a[i][j] = (char)(a[i][j - 1] + 1); System.out.print(a[i][j-1]); } System.out.println(); } } }
首先我们看,二维数组的声明,
char [] [] a = new char[4][10];
类型是char类型的,二维的,就是两个方括号,后面new的时候,两个方括号中的数字含义不同,第一个方括号可以理解为行,第二个可以理解为列,就是4行10列的矩阵,矩阵的概念大家自己去了解,这里就不说了
换一种思路就是一个数组长度是4,其中每个元素又是一个长度为10的数组
大家好好理解下
我们对长度为4的数组做了一下初始化,每个元素都是new char[10]这样一个长度为10的一维数组,
然后就相当于是对每行的第一列做了初始化,分别是 65 67 69 71,
一维数组是一层循环,那么二维数组就是两层循环了,我们这个循环是为这个二维数组中的每个元素赋值,这个a[i][j -1] + 1就是拿到前一个元素的值然后加1,作为当前元素的值,打印出来,这个打印注意了,没有ln,只是print()这样的打印是没有换行的
然后我们在内层循环结束后打了一个println()这个是换行的
来看看运行结果
恩?是不是很奇怪呢?我们从头到尾为也没输入英文字符,这些字符是哪里来的呢?
其实重点就是(char)这里,有一个强转的操作,在ASCII码中,英文字符(区分大小写)都有一个数字与之对应,具体对应表,大家自己找一找,我就不多说了,简单的说就是65对应就是大写A往后加1就是了
二维数组如何静态初始化其实跟一维是相同的
如下:
int [] [] s = {{1,2},{3,4},{5,6}}
数组就是用大括号包起来的一组,二维,就是数组套数组,三维就是数组套数组再套数组
那么三维的是什么样,大家就应该都知道了
这里我就不多解释三维数组了,大家自己练习练习就好
值得我们注意的是正常的开发中数组的使用并不是很频繁,因为一个重要原因就是一个数组一旦声明了,容量就固定了,也就是说我们声明的时候的长度,固定了之后不容改变,如果想在运行时改变,那么就是另外一种数据结构了,后面我们再讨论,这里大家记住就好;
相关推荐
现在,我们将从零开始,深入探讨Z-Stack的相关知识点。 1. **Z-Stack的基础概念** - **Z-Stack架构**:Z-Stack通常由设备层、网络层和应用层构成,每一层都有特定的任务和功能,确保设备之间的高效通信。 - **...
Z-Stack ZCL API 是德州仪器(Texas Instruments, 简称TI)发布的一份技术文档,主要涉及ZigBee技术中的ZigBee Cluster Library(ZCL)API。ZigBee是一种基于IEEE 802.15.4标准的无线通信协议,常用于个人区域网络,...
ISE IP核使用说明涉及了多个数字电路设计中使用的基础IP(Intellectual Property,知识产权)核组件。这些IP核组件通常被集成在FPGA(Field Programmable Gate Array,现场可编程门阵列)设计中,以简化硬件设计流程...
纯 Java ZigBee 应用程序框架 Bekko提供用于开发 ZigBee 应用程序的 Java API,并允许用户应用程序与标准 ZigBee 设备进行通信。 与其他“XBee API Java-Wrapper”不同,Bekko 具有 ZDO/ZDP 实现和标准化的 APS 数据...
### Z-Stack ZCL API 知识点解析 #### 一、引言 ##### 1.1 目的 本文档旨在提供Z-Stack ZigBee Cluster Library (ZCL) API 的详细介绍,帮助开发者理解并利用这些API进行ZigBee设备的应用程序开发。 ##### 1.2 ...
标题 "The document was created with Spire.PDF for Java" 提供了一个关键信息,即文档是使用Spire.PDF for Java工具创建或处理的。Spire.PDF for Java是一款由E-iceblue公司开发的PDF库,它允许Java开发者在应用...
1. **时间戳**(41位):从2015年1月1日(UTC/GMT的00:00:00)开始至未来的毫秒数。这部分可以表示大约69年的时间,足以覆盖大部分业务场景。 2. **工作节点ID**(10位):用来区分不同的工作节点,可以配置为数据...
- ZPR和ZCL:手动回零后自动设定工件坐标系及是否取消局部坐标系。 - 第一至第四参考点的坐标值:设定参考点的位置,便于工件定位。 5. **行程限位参数**: - 第一至第三行程限位的正向和反向值:定义行程边界,...
所有测试类的类别为ZCL_CI_CATEGORY_DSAG 。 ZCL_CI_TEST_DSAG_PRETTY_PRINT 用于检查Pretty Print是否已应用于源代码的类。 ZCL_CI_TEST_COMP_PROCS 用于执行各种基于代码的测试的类(有关详细信息,请参见docu)。...
注意:生成的代码当前使用ZCL_OAPI_JSON,建议将实现复制到生成的全局类中的本地类 生成旨在在v702上运行 生成的客户端代码旨在在v702上运行 建筑/开发 prerequsites = 12+ 安装npm install npm test =运行单元...
- 应用层(APL):讲解ZigBee应用框架,包括ZigBee PRO和ZigBee Cluster Library(ZCL),以及如何实现自定义应用。 3. **ZigBee网络构建** - 设备角色:节点类型如协调器、路由器和终端设备的角色和职责。 - ...
- **类名**: ZCL_CRM_GENIL_QUERY。 - **超类**: CL_WCF_GENIL_ABSTR_COMPONENT。 - **目的**: 定义一个自定义的组件类来支持后续的复杂查询逻辑。 ##### 2. 维护视图簇 - **T-Code**: SM34。 - **视图簇**: CRMVC_...
蓝桥杯单片机——09 定时器设计秒表,这个是我学习蓝桥杯单片机时,通过B站上的各种视频资源整理出来的代码。...相关链接《蓝桥杯单片机竞赛各模块总结》:https://blog.csdn.net/ZCL__/article/details/109250325
- **数组和指针**:一维数组的定义和使用,理解指针与数组之间的关系。 - **复合数据类型**:结构体、联合体和枚举类型的定义与使用。 - **预处理指令**:文件包含(#include)和宏定义(#define)等。 ### 4. Web...
- **LOOP**:循环语句,可以遍历数组或表。 - **DO/ENDDO**:另一种循环结构,通常用于固定次数的循环。 ##### 2.4 输入输出 ABAP程序中的输入输出主要包括: - **WRITE**:用于输出文本到屏幕。 - **READ**:从...
蓝桥杯单片机——20 定时器,这个是我学习...模式三:数码管前三位显示-3- 设定的数字开始倒计时,数字为0时蜂鸣器响。 相关链接《蓝桥杯单片机竞赛各模块总结》:https://blog.csdn.net/ZCL__/article/details/1
两份文档: zigbee-cluster-library-specification Document: 07-5123-06 zigbee-cluster-library-specification Document:ZigBee Document 075123r04ZB 2012
应用层还可以包含ZigBee设备对象(ZBO)和ZigBee簇库(ZCL),方便设备间的互操作性。 “支持各种不同硬件平台”意味着该ZigBee协议栈是跨平台的,能够适应各种类型的微控制器(MCU)。这通常通过抽象硬件接口实现,使得...
**ZigBee Cluster Library (ZCL)** 是一种标准化的应用层协议,它定义了不同ZigBee设备之间如何进行通信的标准方法。此文档(ZigBeeClusterLibraryDocument–075123)详细介绍了ZigBee Cluster Library Revision 6 ...
- 指定安装目录,例如D:\app\zcl(zcl为用户名)。 - 设置数据库类型为一般事务处理。 - 全局数据库名称(例如stone),服务标识符SID与数据库名称相同。 - 选择UTF-8作为字符集,以便支持多语言环境。 - 打勾...