[正式学习java②]——数组的基本使用,java内存图与内存分配

简介: [正式学习java②]——数组的基本使用,java内存图与内存分配

一、数组的两种初始化方式

1.完整格式(静态初始化)

数据类型[] 数组名 = new 数据类型[]{元素1,元素2…};

//范例
int[] arr = new int[]{1,2,3,4};

简化书写

一般我们会省略=后面的 new 数据类型[]

int[] arr = {1,2,3,4};

2.动态初始化

当不知道数组里面的初始值的时候,我们就要采用动态初始化

//申请一个长度为10的int类型的数组
int[] arr = new int[10];

区别:

动态初始化的数组有初始值

整数 -> 0 浮点数 -> 0.0 引用数据类型 -> null

布尔 -> false 字符型 -> 0

静态初始化不带长度,(自动计算)

二、数组的遍历方式

通过索引循环遍历

int[] arr = {1,2,3,4};
for(int i = 0; i<arr.length(); i++){
    System.out.println(arr[i]);
}

当然还有别的方法,我们先混个眼熟

//增强for,对于数组来说,本质与普通for相同
for (int i : arr) {
    System.out.println(i);
}
//以字符串的形式展示
System.out.println(Arrays.toString(arr));

三、数组的开辟与访问

开辟:在堆上开辟一块新空间,将地址返回给数组名

访问:数组名[索引]

四、数组的注意事项

1.数组直接打印打印的是地址值

System.out.println(arr)打印的就是arr的地址值,因为地址也是一个数嘛 printf就是负责打印

2.数组在内存图中的位置

定义数组是通过new关键字,new关键字定义的所有对象都是在堆上开辟空间的

所以下面的结果是什么 是true还是false

int[] arr1 = {1,2,3}; int[] arr2 = {1,2,3};

arr1 == arr2 // true  or  false ???

比较的是地址值为false

3.数组一旦开辟了空间长度是不可变的

虽然java弱化了指针与地址的概念,但是C的内存机制是最基础最底层的原理

4.区分数组长度为0 和 数组 == null的概念

数组长度为0 是指定义了一个长度为0的数组

数组 == null是指数组的地址为null,也就是空指针

5.理解数组越界的概念

从内存的角度理解数组越界的概念

五、java内存分配

栈:方法运行会加载进栈,局部变量会在栈上开辟空间

堆:使用new关键字创建的对象,都在这开辟空间

方法区:存储class文件

寄存器与本地方法栈:我们暂时不需要了解

一个简单的java程序,运行时的内存图

①加载Test2 class文件到本地方法区

②main方法为主入口,main方法进栈

③调用show方法,show方法进栈

④show调用完出栈

④为变量a在栈上开辟空间

⑤输出a

六、总结

数组何时用动态初始化、何时用静态

数组是在哪里开辟空间的

数组名==数组名比较的是什么

相关文章
|
4月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
406 0
|
4月前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
461 7
|
4月前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
292 1
|
5月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
96 5
|
5月前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
178 1
|
Java
Java面试题:Java内存模型与并发编程知识点,解释Java中“happens-before”的关系,分析Java中的内存一致性效应(Memory Consistency Effects)及其重要性
Java面试题:Java内存模型与并发编程知识点,解释Java中“happens-before”的关系,分析Java中的内存一致性效应(Memory Consistency Effects)及其重要性
138 0
|
SQL 安全 Java
java单例——Java 内存模型之从 JMM 角度分析 DCL
java单例——Java 内存模型之从 JMM 角度分析 DCL
187 0
|
存储 算法 Java
【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )
【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )
380 0
|
存储 缓存 Java
Java高级之内存模型分析
博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 下文是博主感悟,请带着怀疑性的态度阅读! 需要了解基本变量所占内存大小,请移步:读书笔记-类结构的认识 Java存储空间有这么几块-来源于Java编程思想 寄存器:位于处理器内部,不受外层代码控制,由处理器自行分配-C/C++可以建议分配方式,使用句柄(包含引用类型和引用地址)来操作数据。
1139 0
|
4月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
260 2