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后





posted @ 2018-04-18 15:09  惶者  阅读(183)  评论(0编辑  收藏  举报