一、数组
double[] myList = new double[10];
上面的语法语句做了两件事:
1、使用 new double[10] 创建了一个数组。
2、把新创建的数组的引用赋值给变量 myList。
二、初始化
初始化:
Java中的数组必先初始化才可以使用
所谓初始化就是为数组的数组元素分配内存,并为每个数组元素赋值;
数组初始化的两种方式:
静态初始化:
在定义数字的同时就为数组元素分配空间并赋值;
初始化时由我们自己指定每个数组元素的初始值,由系统决定需要的数组长度;
格式:数组名 = new 数组类型[]{元素1,元素2,元素3...元素n};
简化语法:数组名 = {元素1,元素2,元素3...元素n};
动态初始化:
数组定义与为数组分配空间和赋值的操作分开进行
初始化时由我们指定数组的长度,由系统为数组元素分配初始值;
格式:数组名 = new 数组类型[数组长度];
.
.
import java.util.Arrays;
public class TestClass {
public static void main(String[] args) {
int []arr = new int[]{1,2,3,4}; // 静态初始化方式1
showNum(arr);
int []arr2 = {11,12,13,14}; // 静态初始化方式2 简便写法
showNum(arr2);
int []arr3;
arr3 = new int[3]; // 默认初始化
showNum(arr3);
arr3[0]=21;
showNum(arr3); // 动态初始化
}
public static void showNum(int ...arr){
System.out.println(Arrays.toString(arr));
}
}
.
打印:
[1, 2, 3, 4]
[11, 12, 13, 14]
[0, 0, 0]
[21, 0, 0]
不能静态和动态初始化同时使用:
也就是说动态初始化不能同时指定数组的长度和元素;
三、数组的内存分配
数组的内存分配 栈内存和堆内存
如定义一个数组
int []scores;
scores = new int[5];
int[]scores 将在栈内存中为scores 分配内存空间,其值是一个不确定的值。
当执行语句scores=new int[5]时,将在堆内存分配连续5个空间,每个空间4个字节,用于存放整型数据,其初始值为0,然后将该段空间首地址,也就是第一个元素的地址,比如0*3000,赋给scores变量。该地址相当于一个指针,指向堆内存中分配的空间。此时堆内存中分配的5个空间可以分别使用scores[0],一直到scores[4]来表示。当执行四个赋值语句时,分别用指定值填充到对应元素位置。
如果此时将null值赋给scores时,scores变量将不再指向任何位置,此时堆内存中分配的空间就变成了垃圾,由垃圾回收器在某一时间进行回收。
在方法中定义的变量,包括基本数据类型变量和引用数据类型变量,都将在栈内存中分配空间,当超过变量作用范围后,自动回收