2.6数组

数组初始化之静态初始化

静态初始化:初始化时,就可以指定数组要存储的元素,系统还会自动计算出该数组长度

格式:数据类型[]变量名= new 数据类型[]{数据1,数据2,数据3,......};

两种初始化的区别对比

动态初始化:手动指定数组长度,由系统给出默认初始化值

静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度

使用场景:

动态初始化:只明确元素个数,不明确具体数值,推荐使用动态初始化

静态初始化:需求中已经明确了要操作的具体数据,直接静态初始化即可

数组操作常见的两个问题

索引越界:访问了数组中不存在的索引,造成索引越界问题

空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常

在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块 (也就是一对花括号之间)定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用,先前讲到的知识都属于栈中分配的变量。

堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理(关于自动垃圾回收器请参看第 1 章中的垃圾回收器介绍)。在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象,引用变量就相当于是为数组或对象起的一个名称(叫代号也行)。引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放,而数组和对象本身在堆中分配,即使程序运行到使用 ncw 产生数组和对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指向它时,才会变为垃圾,不能再被使用,但仍然占据内存空间不放,在随后一个不确定的时间被垃圾回收器收走(释放掉) 这也是 Java 比较占内存的原因

public class Test06{
    public static void main(String[] args){
        int x[];
        x = new int[100];
        for(int i = 0; i < 100; i++){
            System.out.println("x" + i + "is" + x[i]);
        }
    }
}

数组是多个相同类型数据的组合,实现对这些数据的统一管理,数组中的每一个数据也叫数组的一个元素。

必须对数组引用变量赋予一个有效的数组对象(通过new产生或是用静态初始化而产生)后,才可以引用数组中的每个元素

public class Test07{
    public static void main(String[] args){
        int ia[] = new int[]{1,2,3,4,5};
        System.out.println(ia.length);
        for(int i = 0; i < ia.length; i++){
            System.out.println("ia["+i+"] is" + ia[i]);
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值