java内存分析


堆中存放new出来的对象和数组,存放具体的值的变量存放在栈里面

在定义和创建数组的时候内存发生了什么?

当用户定义了一个数组,例如:int [ ] Array;只是定义了一个数组没有创建。这时在栈里记录了一个int类型的数组Array,但是栈里面并没有存放数组里面的数据,当用户创建数组是,例:int [ ] Array=new int[5];在内存空间的堆创建了一个int类型的Array数据,并定义数组长度是5,所以数组创建前也就是在定义的时候,是存放在栈里的,创建后并赋值之后是存放在堆里面的

下标越界:

当用户定义了一个int类型的数组名为Array长度为5,数组的下标为(0-Array.length)-1,也就是0-4,

int [] Array = new int[5];
//数组也可以直接创建,无需定义,定义则是空数组
Array[0]=1;    //分别赋予初始值
Array[1]=2;
Array[2]=3;
Array[3]=4;
Array[4]=5;

当我取的值大于数组的最大长度则会出现下表越界的现象

例如:下表最大是4但是我取5的值,则会报错

System.out.print(Array[5])

数组的初始化方式:

//第一种
int []Array;    //只定义数组,并没有创建
//第二种
int [] Array = new int [10];//无需声明数组,直接创建数组并指定长度

静态初始化与动态初始化

静态初始化

int [] Array1={1,2,3,4,5,6,7,8,9,10};       //定义数组时并定义初始值
int [] Array2={11,22,33,44,55,66,77,88,99,100};//定义后无法修改

Man引用类型

Man[] mans={new Man1(),new Man2()};

动态初始化

int [] Array = new int [10];    //先创建后赋予值
Array[0]=100;
Array[4]=400;

数组的四个特点

  • 数组的长度是确定的,数组一旦被创建长度就无法改变的
  • 数组内的元素必须是相同类型的,不能出现类型混乱等现象
  • 数组中的元素可以是任何的数据类型,包括基本数据类型和引用数据类型
  • 数组比哪里属于引用数据类型,数组本身就是对象,java中对象是在堆中国的,数组无论保存原始数据类型还是其他数据类型,数组对象本身是在堆中的

数组边界

下标合法区间:从0-(length-1)如果超出则报错

报错信息:Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 8

数组小结:

  1. 数组是相同数据类型
  2. 数据也是对象,数组元素相当于对象的成员变量
  3. 数组长度的确定性,是不可变的

java全栈系列之JavaSE--数组的三种初始化方法及内存分析024相关推荐

  1. java全栈系列之JavaSE--冒泡排序028

    冒泡排序是在一组数组中将相邻的两个元素进行比较,可以按由大到小或者由小到大的循序排列, 冒泡排序示意图: 每循环一次相邻的两个数进行大小比较,若由小到大的循序则大的数据在小的数据右侧 冒泡排序流程图 ...

  2. Java全栈系列笔记

    Java全栈系列笔记 全部文档.项目.源码: github:https://github.com/name365/Blog-Java 码云:https://gitee.com/yang365/Blog ...

  3. Java数组的三种定义方法

    Java数组的三种定义方法 1.第一种适合不用初始化的数组.数组特别长的时候,不初始化,值都是默认值. 2.第二种定义适合直接初始化数组 3.第三种匿名数组适合直接给方法传入参数时使用 1.第一种适合 ...

  4. 数组,三种初始化和内存分析

    数组,三种初始化和内存分析 Java内存分析: 堆:存放new的对象和数组 ​ 可以被所有的线程共享,不会存放别的对象引用 栈:存放基本变量类型(会包含这个基本类型的具体数值) ​ 引用对象的变量(会 ...

  5. java全栈系列之JavaSE--Arrays类详解027

    数组工具类java.util.Arrays Arrays类的常用功能: 给数组赋值,通过fill方法 对数组进行排序,通过sort方法 比较数组,通过equals方法比较两数组的元素值是否相等 查找数 ...

  6. java全栈系列之JavaSE--数组的定义和创建023

    数组 数组的定义 数组是相同类型数据的有效集合 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成 数组中每一个数据成为数组元素每个数组元素可以通过下标来访问他们 在main方法里面就有 ...

  7. java全栈系列之JavaSE-面向对象(方法重写)037

    子类在调用父类的私有方法中不能直接调用,但是可以通过get方法进行调用,修改属性的值可以通过set方法进行修改.而子类想要修改父类中的方法可以使用方法重写进行操作. 方法重写与之前的方法重载不同 回顾 ...

  8. 狂神说JAVA 数组、三种初始化和内存分析

    声明数组变量 dataType[] arrayRefVar; // 首选的方法或 dataType arrayRefVar[]; // 效果相同,但不是首选方法 dataType[] arrayRef ...

  9. java数组初始化赋值_Java数组的三种初始化方式

    Java语言中数组必须先初始化,然后才可以使用.所谓初始化就是为数组的数组元素分配内存空间,并为每个数组元素附初始值. 注意:数组完成初始化后,内存空间中针对该数组的各个元素就有个一个默认值: 基本数 ...

最新文章

  1. ixf文件 mysql导入,控制 PC/IXF 文件导入数据库的一般规则
  2. Java中几种日期格式相互转换
  3. Myeclipse学习总结(11)——Eclipse中设置Java/Css/Html/Jsp换行长度
  4. 微服务架构实战篇(一):使用start.spring.io 构建SpringBoot2.0项目
  5. python 时频图_python,地震波形、时频图、频谱图计算和显示软件
  6. 4.7 使用色相/饱和度命令调整图像的色彩 [原创Ps教程]
  7. 计算机word正文样式怎么新建,Word 2013中样式的创建与修改 创建新样式——想象力电脑应用...
  8. 微信小程序|借助和风天气开放API接口,实现天气预报
  9. 1370. Increasing Decreasing String
  10. 北京化工大学通信工程linux,2020北京化工大学信息与通信工程考研经验考研真题考研分数线考研参考书、目录...
  11. 全差分运放阻抗匹配计算(一)
  12. 手机拍摄全景图并且使用Threejs实现VR全景,超简单WebVR
  13. 如何用python写一个答题程序_如何使用Python写一个百万英雄的答题辅助程序 (0) 简介...
  14. STC单片机驱动BLDC无刷直流电机(无HALL)官方示例
  15. 享学课堂java架构师课程,你还看不明白?
  16. VoIP网络电话各种软硬设备部署一览★龙人skype网络电话公司
  17. 如何批量将XPS转成Word
  18. 为什么说 TCP 协议是可靠的?
  19. 听说,这 9 张脸是人脸识别的“万能钥匙”?
  20. 台式计算机网线,台式电脑连接网线的是哪里 台式电脑怎么连接wifi步骤

热门文章

  1. 微信rpc服务器不可用怎么办,Win7提示rpc服务器不可用怎么办 提示rpc服务器不可用解决办法...
  2. 站内搜索 迅搜xunsearch 中小型网站的福音
  3. awk ——awk将每个输入行解释为一条记录而将一行上的每个单词(由空格或行由制表符分隔)解释为每个字段。
  4. Vitamio使用篇,打造强悍的视频播放器
  5. js兵器谱之魔法召唤师:call / apply
  6. matlab dcc,重金感谢(dcc-mvgarch)!
  7. Chapter 19 稳恒磁场
  8. 【电机】使用Simulink建立BLDC反电动势测量的简单模型
  9. 苹果手机为什么要越狱,越狱后的优缺点
  10. Sublime 使用总结