Day4

数组

语法

数组的声明:

int[] ints;

数组的初始化(initialization):

  • 静态初始化
ints = new int[]{};//若不放元素 默认为0
// 或者

ints = new int[]{1,2,3};

需要我们显式的赋值,数组的长度由系统完成。

  • 动态初始化
ints = new int[3];//动态初始化不能不给长度,数组一定给定了长度就不能改变了。

给数组分配空间并不是分配操作系统的空间,而是分配JVM中的空间。

数组是引用数据类型。

JAM内存模型

为了更好的描述JVM内存空间,Java的开发者,在《Java虚拟机规范》中指出:JVM (运行时数据区)内存共分为JVM栈,堆,方法区,程序计数器,本地方法栈五个部分。

* NPE 空指针异常
* 因为数组的引用指向了空常量null,实际上没有数组,
* Arrays.toString();//把数组变成字符串
* 输出结果[1,2,3]

什么是引用数据类型(数组初始化的内存分配过程)

引用数据类型是Java的两个数据类型之一。引用数据类型的创建分为两部分:

  • 首先在栈上(栈帧上)开辟一片空间给引用类型引用,一个变量是否被初始化都占内存空间啊。

  • 然后在堆上开辟一片空间,用于存放引用数据类型具体数据信息,称之为“对象”或者实例。

  • 栈上的引用是指向堆上对象的地址。

    直接输出数组名:log:[数组,I数组类型 @后接16进制内存地址。数组首地址。

  • 基本数据类型不存在”引用“的概念,数据都是直接存储在栈上的栈帧里;

  • 堆上的变量具有默认值

    • 整形(byte、short、int、long)默认值为0

    • 浮点类型(float、double)默认值为0.0

    • 字符类型(char)默认值是'\u0000' 空字符

    • 布尔类型(boolean)默认值是false

    • 引用数据类型默认值是null 

  • 栈上变量没有默认值,声明必须显式的初始化,否则无法使用 

  1. 生命周期来看:

  • 堆上的对象使用完毕后,就会变成“垃圾”,会等待垃圾回收器进行内存回收

    • 堆上的对象变成垃圾后,并不是立刻就会被回收,而是等待垃圾回收器进行回收
    • 整个垃圾回收的过程都是由Java的垃圾回收机制自动完成的,极大的节省了Java程序员的精力
    • 垃圾回收是Java和C++之间的一道围墙,墙外的人想进来,墙内的人却想出去
  • 栈上的局部变量的生命周期和栈帧保持一致

    • 方法栈帧进栈后,局部变量就被声明分配空间了

    • 方法出栈后,局部变量就被销毁了 。

上一篇:leetcode打卡day4


下一篇:【软件测试】3.深入了解软件测试基础day4