一、数组概念

  数组即为多个相同数据类型数据的数据按一定顺序排列的集合。

二、数组的特点

  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数组(基本+内存分析)的更多相关文章

  1. 【Java线程与内存分析工具】VisualVM与MAT简明教程

    目录 前言 VisualVM 安装与配置 本地使用 远程监控 MAT 使用场景 安装与配置 获得堆转储文件 分析堆转储文件 窥探对象内存值 堆转储文件对比分析 总结 前言 本文将简要介绍Java线程与 ...

  2. Java数组以及内存分配

    Java数组以及内存分配 什么数组(简) 数组初始化 动态初始化 静态初始化 内存分配问题(重) 数组操作的两个常见小问题 什么是数组: 定义格式: 数组类型 [] 数组名 ; 如:常用格式,其他方式 ...

  3. Java数组的内存管理

    Java数组的内存管理 Java语言是典型的静态语言,因此Java的数组是静态的,即当数组被初始化之后,该数组的长度是不可变的.Java程序中的数组必须经初始化才能使用.所谓初始化,就是当数组对象的元 ...

  4. Java数组和内存控制

    1.数组初始化 1.1 Java数组是静态的 Java语言是典型的静态语言,因此Java的数组是静态的,即当数组被初始化之后,该数组的长度是不可变的.Java程序中的数组必须经初始化才可使用.所谓初始 ...

  5. Java数组及其内存分配

    几乎所有的程序设计语言都支持数组.Java也不例外.当我们需要多个类型相同的变量的时候,就考虑定义一个数组.在Java中,数组变量是引用类型的变量,同时因为Java是典型的静态语言,因此它的数组也是静 ...

  6. java数组与内存控制

    1.1数组的初始化 数组是大多数编程语言都提供一种的复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组.java语言的数组变量时引用类型的变量,因此具有java独有的特性. java数 ...

  7. java执行程序的内存分析系列专栏

    近段时间研究了java的程序执行过程中的内存分配,收获颇多,解决了我最近时间学习java的很多困惑点.写java内存分析系列的目的主要有两个,一来是希望给像我一样的java初学者一定的启发,希望也能解 ...

  8. java执行程序的内存分析系列专栏二之static变量和方法内存分析

    昨天写了简单的聊了下java执行程序时简单的内存划分,今天我们接着往下聊,聊聊static变量和方法的内存分析. 1.static变量和方法的第一个特性内存分析 statiic变量和方法的第一个特性能 ...

  9. Java内置内存分析

    Java内存分析 package com.chao.reflection; public class Test05 { public static void main(String[] args) { ...

  10. Java数组分配内存空间

    分配内存空间 数组名=new 数据类型[数组长度]: new关键字用来实现为数组或对象分配内存 数组具有固定的长度.获取数组的长度: 数组名.length 定义数组+分配内存空间 数据类型[]数组名= ...

随机推荐

  1. docx.opc.exceptions.PackageNotFoundError: Package not found at '文件名.docx' 问题解决

    编译源程序时,提示:docx.opc.exceptions.PackageNotFoundError: Package not found at '文件名.docx' . 源文件明明存在啊,难道是用的 ...

  2. Java设计模式十九——责任链模式

    责任链模式 老李的苦恼 每个人在出生的时候,都早已在暗中被标好了三六九等. 老李是一名建筑工地的木匠,和大多数生活在社会最底层的农民工一样,一辈子老实本分,胆小怕事.在他们的心中,谁当老爷都没有区别, ...

  3. SQL注入原理及代码分析(一)

    前言 我们都知道,学安全,懂SQL注入是重中之重,因为即使是现在SQL注入漏洞依然存在,只是相对于之前现在挖SQL注入变的困难了.而且知识点比较多,所以在这里总结一下.通过构造有缺陷的代码,来理解常见 ...

  4. day33 网络编程(下)

    目录 上节课回顾: 一.传输层 二.应用层 三.socket 四.如何获取目标ip地址 五.网络通信的流程 上节课回顾: 通过ip地址如何找到另外一台设备 ip地址分为子网部分和主机部分 我们要和其他 ...

  5. JavaScript location对象、Navigator对象、Screen对象简介

    Location对象 location用于获取或设置窗体的URL,并且可以用于解析URL. 语法: location.[属性|方法] Location对象属性 Location对象方法: Naviga ...

  6. Python 默认参数 关键词参数 位置参数

    def StudentInfo(country='中国', name): print('%s,%s' % (name, country)) StudentInfo('美国', '大卫') 上述代码报错 ...

  7. Ubuntu systemctl 查看管理系统启动项

    Ubuntu systemctl 查看系统启动项 列出所有启动项: sudo systemctl list-unit-files 会列出开启的和未开启的: 使用grep过滤一下开启的grep enab ...

  8. javascript基础(七):js发送请求

    GET请求 $.get("/api/v1.0/user",function(resp){ // 用户未登录 if ("4101" == resp.errno) ...

  9. 机器学习实战基础(二十五):sklearn中的降维算法PCA和SVD(六) 重要接口,参数和属性总结

    到现在,我们已经完成了对PCA的讲解.我们讲解了重要参数参数n_components,svd_solver,random_state,讲解了三个重要属性:components_, explained_ ...

  10. IOS中input键盘事件keyup 的兼容解决办法

    用input监听键盘keyup事件,在安卓手机浏览器中是可以的,但是在ios手机浏览器中很慢,用输入法输入之后,并未立刻相应keyup事件. 解决办法: 在ios设备上可以用html5的input事件 ...