Java数组(基本+内存分析)
一、数组概念
数组即为多个相同数据类型数据的数据按一定顺序排列的集合。
二、数组的特点
1、数组有数组名、索引、元素、素组长度;
2、数组的元素可以是基本数据类型也可以是引用数据类型;
3、数组的长度一旦确定便不可更改;
4、数组的在内存中表现为连续的存储单元,数组名引用的是首地址;
三、数组分类
按照维度分可以分为一维数组和多维数组;按照元素类型分可以分为基本类型元素数组和引用数据类型元素数组。
四、初始化默认值

五、一维数组
初始化
1、动态初始化:动态初始化便是数组声明和赋值分别进行。例如:
int array[] = new int[3]; array[0] = 1; array[1] = 2; array[2] = 3;
2、静态初始化:动态初始化便是数组声明和赋值同时进行。例如:
int []array = {1,2,3,4,5};
内存分析
内存结构简图:

用以下代码分析内存:
int []id = new int[3]; id[1] = 12; id[2] = 56; id[3] = 45;
定义数组后:

数组赋值以后:

从上不难看出:当创建一个数组是(即new一个数组),首先在栈空间出现数组名,在堆空间开辟出连续的存储空间,并且数组名指向连续存储空间的首地址,存储空间的存储值均为默认值。
六、二维数组
概述
上文中提到,数组的元素数据类型可以为基本数据类型和引用数据类型,一维数组中元素就是基本数据类型数据,例如int、double等;而二维数组实际上就是将一维数组的元素由基本数据类型变为了引用数据类型,在一维数组中在存入数组,所以从根本来看,不存在二维数组。
初始化
1.1、动态初始化格式一:
int [][]array = new int[3][2];
实际上即使有一个一维数组(也可以理解为三个一维数组),数组有三个元素,这三个元素均为数组,且数组均存了两个元素;图示如图:

1.1、动态初始化格式二:
int [][]array = new int[3][];
这里与方式一不同,方式一是一维数组的三个元素均为数组,而这里三个元素均为null,可以对每个一维数组进行初始化:
array[0] = new int[3]; array[1] = new int[6]; array[2] = new int[8];
内存分析
二维数组的内存实则和一维数组没有本质区别。只是将一维数组存的数据改为了另一个数组的首地址。
Java数组(基本+内存分析)的更多相关文章
- 【Java线程与内存分析工具】VisualVM与MAT简明教程
目录 前言 VisualVM 安装与配置 本地使用 远程监控 MAT 使用场景 安装与配置 获得堆转储文件 分析堆转储文件 窥探对象内存值 堆转储文件对比分析 总结 前言 本文将简要介绍Java线程与 ...
- Java数组以及内存分配
Java数组以及内存分配 什么数组(简) 数组初始化 动态初始化 静态初始化 内存分配问题(重) 数组操作的两个常见小问题 什么是数组: 定义格式: 数组类型 [] 数组名 ; 如:常用格式,其他方式 ...
- Java数组的内存管理
Java数组的内存管理 Java语言是典型的静态语言,因此Java的数组是静态的,即当数组被初始化之后,该数组的长度是不可变的.Java程序中的数组必须经初始化才能使用.所谓初始化,就是当数组对象的元 ...
- Java数组和内存控制
1.数组初始化 1.1 Java数组是静态的 Java语言是典型的静态语言,因此Java的数组是静态的,即当数组被初始化之后,该数组的长度是不可变的.Java程序中的数组必须经初始化才可使用.所谓初始 ...
- Java数组及其内存分配
几乎所有的程序设计语言都支持数组.Java也不例外.当我们需要多个类型相同的变量的时候,就考虑定义一个数组.在Java中,数组变量是引用类型的变量,同时因为Java是典型的静态语言,因此它的数组也是静 ...
- java数组与内存控制
1.1数组的初始化 数组是大多数编程语言都提供一种的复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组.java语言的数组变量时引用类型的变量,因此具有java独有的特性. java数 ...
- java执行程序的内存分析系列专栏
近段时间研究了java的程序执行过程中的内存分配,收获颇多,解决了我最近时间学习java的很多困惑点.写java内存分析系列的目的主要有两个,一来是希望给像我一样的java初学者一定的启发,希望也能解 ...
- java执行程序的内存分析系列专栏二之static变量和方法内存分析
昨天写了简单的聊了下java执行程序时简单的内存划分,今天我们接着往下聊,聊聊static变量和方法的内存分析. 1.static变量和方法的第一个特性内存分析 statiic变量和方法的第一个特性能 ...
- Java内置内存分析
Java内存分析 package com.chao.reflection; public class Test05 { public static void main(String[] args) { ...
- Java数组分配内存空间
分配内存空间 数组名=new 数据类型[数组长度]: new关键字用来实现为数组或对象分配内存 数组具有固定的长度.获取数组的长度: 数组名.length 定义数组+分配内存空间 数据类型[]数组名= ...
随机推荐
- vue全家桶(3.2)
4.5.创建实例 可以创建一个自定义实例应用于多个请求接口 <template> <div class="page"> </div> </ ...
- apply()方法和call()介绍
我们发现apply()和call()的真正用武之地是能够扩充函数赖以运行的作用域. 1.call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的 ...
- 09 . Prometheus监控tomcat+jvm
List CentOS7.3 prometheus-2.2.1.linux-amd64.tar.gz redis_exporter-v0.30.0.linux-amd64.tar.gz 节点名 IP ...
- 服务认证(JWT)
上一篇已经讲了微服务组件中的 路由网关(Zuul),但是未介绍服务认证相关,本章主要讲解基于Spring Security 与 JJWT 实现 JWT(JSON Web Token)为接口做授权处理… ...
- 关于使用swagger的问题
近来在公司实现,接触到不少新的工具框架,今天见识到了一个新的工具,它的存在好像是情理之中的,但是以前就没有遇到这东西.那就是swagger,它的功能就是把你写的controller的内容都集合到一起方 ...
- JVM学习篇-第一篇
JVM学习篇-第一篇 JDK( Java Development Kit): Java程序设计语言.Java虚拟机.Java类库三部分统称为JDK,JDK是用于支持Java程序开发的最小环境** ...
- Django---进阶14
目录 登陆功能 首页搭建 admin后台管理 用户头像展示 图片防盗链 个人站点 侧边栏筛选功能 登陆功能 def login(request): if request.method == 'POST ...
- 微信解密encryptedDataStr获取用户信息
A:<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">& ...
- mysql Unknown error 1146
错误提示:Couldn't acquire next trigger: Unknown error 1146 spring +quartz 实现任务调度,由于quartz 默认读取表名为大写,新建数据 ...
- 从零开始使用 Webpack 搭建 Vue3 开发环境
从零开始使用 Webpack 搭建 Vue3 开发环境 创建项目 首先需要创建一个空目录,在该目录打开命令行,执行 npm init 命令创建一个项目,这个过程会提示输入一些内容,完成后会自动生成一个 ...