• 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后





  • 相关阅读:
    js getAttribute()和setAttribute()方法
    FCKeditor上传图片显示叉叉的问题的解决方案
    数据导出
    插入多种格式的网页播放器
    注册机...郁闷..
    AJAX效果
    2003下使用JMAIL问题解决办法
    ASP无组件上传带进度条
    MSSQL查询题解
    在线转flv+flash在线录制视频
  • 原文地址:https://www.cnblogs.com/huangzhe1515023110/p/9276102.html
Copyright © 2020-2023  润新知