Java数组创建与使用

一.创建和初始化

1.数组是怎么创建的?

直接举例子:

int[] arr = new int[10];

这里只简单的举一个int开辟数组的例子。

可见java数组的创建于C语言是不同的。前面是一个int[ ]就是一个数组的数据类型,后面的arr是数组名,最后[ ]里的数字10是开辟10个这样的空间。

2.数组的初始化

数组的初始化分为两种:一种是静态初始化,一种是动态初始化。

2.1动态初始化

这种就是上面举的例子那样:

int[] arr = new int[10];

直接开辟十个空间,只指定元素个数,但不指定元素是谁。

2.2静态初始化

不需要指定元素个数,据情况而定。像这样:

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

上面是完整版本,下面的arr2是上面的简化版本。

当然还可以分成两步:

int[] arr;
//arr = new int[]{1,2,3,4};
//或者arr = new int[13];

这种初始化是不行的:

int[] arr4;
arr4={1,2,3,4};
2.3如果不初始化,数组会取默认值。
类型默认值
byte0
short0
int0
long0
float

0.0f

double0.0
char/u0000
booleanfalse

二.数组的使用

遍历数组的方法

第一种,手动打出每个要访问的元素,比较笨。

第二种,用for循环遍历。

第三种,这个C语言没有,用的是for-each遍历。例子:

int[] arr = {1,2,3,4};
for(int x : arr){
    System.out.println(x);
}

三.数组是引用类型

1.JVM内存分布

其中方法区和堆区是由所有线程共享的数据区,剩下的三个是线程隔离的数据区。

各区的简介:

程序计数器 (PC Register): 只是一个很小的空间,保存下一条执行的指令的地址;

虚拟机栈(JVM Stack): 与方法调用相关的一些信息,每个方法在执行时,都会先创建一个栈帧,栈帧中包含有:局部变量表、操作数栈、动态链接、返回地址以及其他的一些信息,保存的都是与方法执行时相关的一 些信息。比如:局部变量。当方法运行结束后,栈帧就被销毁了,即栈帧中保存的数据也被销毁了;

本地方法栈(Native Method Stack): 本地方法栈与虚拟机栈的作用类似.,只不过保存的内容是Native方法的局部变量,在有些版本的 JVM 实现中(例如HotSpot),本地方法栈和虚拟机栈是一起的;

堆(Heap): JVM所管理的最大内存区域。使用 new 创建的对象都是在堆上保存(例如前面的new int[]{1, 2, 3} ),堆是随着程序开始运行时而创建,随着程序的退出而销毁,堆中的数据只要还有在使用,就不会被销毁;

方法区(Method Area): 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。方法编译出的的字节码就是保存在这个区域。

2.引用数据类型

引用数据类型存储的不是变量的值,而是存储对象所在空间的地址,有点指针那味儿。

上图是两个数组演示图,arr1与arr2各自储存一个空间的地址。

上图是arr2=arr1后,两个数组储存的地址是一样的,因此指向同一个空间。

像这种情况,0X34这块空间没有引用类型指向,会被JVM垃圾回收。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值