Java提高——数组与内存控制
Java数组是静态的,即初始化之后数组长度不可变。初始化就是为数组对象分配内存空间,并为每个数组元素指定初始值。
数组的初始化(两种方式):1、静态初始化:人定值,系统定长;2、动态初始化:人定长,系统定值。(使用时不要同时指定两种初始化)
public class ArrayTest { public static void main(String[] args) { //静态初始化 String[] books = new String[]{ "java","c","c++","python" }; //动态初始化 String[] names = new String[3]; //通过length属性访问长度 System.out.println(books.length+" "+names.length); } }
数组在内存中的示意图:
Java数组是一种引用类型的变量,数组变量不是数组本身,它只是指向堆内存中的数组对象。
public class ArrayTest { public static void main(String[] args) { //静态初始化 String[] books = new String[]{ "java","c","c++","python" }; //动态初始化 String[] names = new String[3]; //通过length属性访问长度 System.out.println(books.length+" "+names.length); names = books; } }执行name = books之后内存中的情况:
数组的初始化并不是对数组变量的初始化,而是对数组对象的初始化——也就是为数组在内存中分配一块连续的内存空间,内存空间的长度就是数组的长度。
所有局部变量都是存放在栈区(不管是基本类型的变量还是引用类型的变量),但引用类型变量所引用的对象则总是存放在堆内存中(包括数组,普通Java对象),堆内存中对象一般不允许直接访问,为了访问则需要通过应用变量。
基本类型数组的初始化:
public static void main(String[] args) { //定义一个数组 int[] arr; //静态初始化 arr = new int[]{1,2,3}; }
内存中的示意图:左边为定义了arr数组,右边为静态初始化后
引用类型初始化
public class Person { int age; double height; public static void main(String[] args) { //定义一个数组 Person[] student; //执行动态初始化 student = new Person[2]; //创建一个实例,并将这个实例赋给zhang Person zhang = new Person(); zhang.age=12; zhang.height=160; Person li = new Person(); li.age=10; li.height=120; //将zhang和li都给student student[0]=zhang; student[1]=li; } }定义一个student引用变量和动态初始化
创建两个Person实例和将两个实例给student后