- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
项目开发中,如果需要存储大量的数据,例如如果需要读取100个数,那么就需要定义100个变量,显然重复写100次代码,是没有太大意义的。Java语言提供了数组(array)的数据结构,可以解决这个问题。
一个数组是相同数据类型的元素按一定顺序排列的集合。使用数组可以将同一类型的数据存储在连续的内存位置。数组中各元素的类型相同,通过下标的方式来访问数组中的元素,下标从0开始。
由此得出,数组具有以下基本特点:
数组在使用之前必须先声明,也就是要先定义后使用。一维数组的定义格式为:
这两种声明方式完全等价,不过在实际开发中,我们一般推荐使用第一种方式。
数组声明之后,仅仅是定义了一个数组引用,系统并没有为数组分配任何内存,因此现在还不能访问它的任何元素。必须经过数组初始化后,才能使用数组的元素。
数组的初始化分为静态初始化和动态初始化两种。
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
例如:int[] arr = new int[]{1,2,3,4};
格式:数据类型[] 数组名 = new 数据类型[数组长度];
例如:
int[] arr = new int[4];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
首先我们要先了解Java中堆和栈的概念。我们可以这样理解:
我们定义的局部变量都存储在栈中;而堆中存放的都是数组和对象(其实数组也是对象)。凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体可以有多个属性,如果一个数据消失,这个实体没有消失,还可以用,所以堆是不会释放的;但是栈不一样,栈里存放的都是单个变量,变量被释放了,那就没有了。
下面,我们通过对一个数组的声明和初始化的例子来看内存的分配情况。
1.声明一个数组
int[] s = null;
这时,只是声明了一个数组变量,这个变量存储在栈中,堆内存中是不会发生变化的:
2.给数组分配空间
s = new int[10];
当给数组分配空间以后,才会在堆内存中给数组真的分配空间,并且变量 s 会指向数组在堆内存中的地址:
3.给数组元素赋值
for(int i = 0;i < 10; i++) {
s[i] = i + 1;
}
遍历数组有两种方式:
for(int i = 数组第一个元素的下标; i < 数组名.length; i++){
System.out.println(数组名[i]); // 输出下标为 i 的元素值
}
数组中的元素个数 length 是数组类中唯一的数据成员变量,使用 new 创建数组时系统自动给 length 赋值。数组一旦创建完毕,其大小就固定下来了。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
for(数组中元素的数据类型 变量名 :数组名){
System.out.println(变量名); // 输出元素值
}
数组元素可以声明为任何类型,当数组的类型是一个一维数组类型时,这样可以建立数组的数组,即二维数组。同理,可以得到多维数组。一般来讲,n 维数组时 n-1 维数组的数组。声明多维数组时使用类型及多对方括号。以二维数组为例,定义格式如下:
类型[][] 数组名;
也可以使用如下两种方式声明一个二维数组:
类型[] 数组名[];
类型 数组名[][];
推荐使用第一种。例如:int[][] arr; 就表示一个二维数组。
与一维数组一样,多维数组的初始化也分为静态和动态两种。
静态初始化时,在定义数组的同时为数组元素赋值。例如,二维数组 arr 的初始化如下:
int[][] arr = {{1,2}, {2,6}, {7,9}};
这里,不必指出数组每一维的大小,系统会根据初始化时给出的初值的个数自动计算数组每一维的大小。外层括号所包含各元素是数组第一维的各元素,内层括号对应于数组第二维的元素。
对二维数组进行动态初始化时,有两种分配内存空间的方法:直接分配与按维分配。
类型[][] 数组名 = new 类型[第一维数组的长度][第二维数组的长度];
例如:int[][] arr = new int[2][3]; 声明了一个2行3列的二维数组。
创建二维数组的一般格式为:
类型[][] 数组名 = new 类型[第一维数组的长度][];
数组名[0] = new 类型[第二维数组的长度];
数组名[1] = new 类型[第二维数组的长度];
……
如果创建数组时第二维大小是一样的,则创建的是一个矩阵数组。
在定义并初始化多维数组后,可以使用多维数组中的每个元素。仍以二维数组为例,访问方式为:
数组名[第一维下标][第二维下标];
数组下标都是从 0 开始,第一维也称为行,第二维也称为列。
二维数组也有length属性,但它只表示第一维数组的长度。例如:
int[][] a = new int[3][4];
a.length 的值就是 3,a[0].length 的值就是 4。
原因如下:
点个关注吧,我会持续更新更多干货~~
大家好,我是汤师爷~ 什么是订单履约系统? 订单履约是从消费者下单支付到收到商品的全流程管理过程,包括订单接收、订单派单、库存分配、仓储管理和物流配送等环节,核心目标是确保商品准时、准确地送达消费
大家好,我是汤师爷~ 今天聊聊促销系统整体规划。 各类促销活动的系统流程,可以抽象为3大阶段: B端促销活动管理:商家运营人员在后台系统中配置和管理促销活动,包括设定活动基本信息、使用规则
全称“Java Virtual Machine statistics monitoring tool”(statistics 统计;monitoring 监控;tool 工具) 用于监控虚拟机的各种运
主要是讲下Mongodb的索引的查看、创建、删除、类型说明,还有就是Explain执行计划的解释说明。 可以转载,但请注明出处。  
1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发。 2>循环服务器和并发服务器
详解 linux中的关机和重启命令 一 shutdown命令 shutdown [选项] 时间 选项: ?
首先,将json串转为一个JObject对象: ? 1
matplotlib官网 matplotlib库默认英文字体 添加黑体(‘SimHei')为绘图字体 代码: plt.rcParams['font.sans-serif']=['SimHei'
在并发编程中,synchronized关键字是常出现的角色。之前我们都称呼synchronized关键字为重量锁,但是在jdk1.6中对synchronized进行了优化,引入了偏向锁、轻量锁。本篇
一般我们的项目中会使用1到2个数据库连接配置,同程艺龙的数据库连接配置被收拢到统一的配置中心,由DBA统一配置和维护,业务方通过某个字符串配置拿到的是Connection对象。  
实例如下: ? 1
1. MemoryCahe NetCore中的缓存和System.Runtime.Caching很相似,但是在功能上做了增强,缓存的key支持object类型;提供了泛型支持;可以读缓存和单个缓存
argument是javascript中函数的一个特殊参数,例如下文,利用argument访问函数参数,判断函数是否执行 复制代码 代码如下: <script
一不小心装了一个Redis服务,开了一个全网的默认端口,一开始以为这台服务器没有公网ip,结果发现之后悔之莫及啊 某天发现cpu load高的出奇,发现一个minerd进程 占了大量cpu,googl
今天写这个是为了 提醒自己 编程过程 不仅要有逻辑 思想 还有要规范 代码 这样可读性 1、PHP 编程规范与编码习惯最主要的有以下几点: 1 文件说明 2 funct
摘要:虚拟机安装时一般都采用最小化安装,默认没有lspci工具。一台测试虚拟网卡性能的虚拟机,需要lspci工具来查看网卡的类型。本文描述了在一个虚拟机中安装lspci工具的具体步骤。 由于要测试
1、修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统
目录 算术运算符 基本四则运算符 增量赋值运算符 自增/自减运算符 关系运算符 逻
如下所示: ? 1
MapperScannerConfigurer之sqlSessionFactory注入方式讲解 首先,Mybatis中的有一段配置非常方便,省去我们去写DaoImpl(Dao层实现类)的时间,这个
我是一名优秀的程序员,十分优秀!