Java数组——深入笔记

目录

 

一:数组的初始化(java语言的数组变量是引用类型的变量。)

二:java数组是静态的。

1:java的数组是静态的:当数组初始化时,该数组的长度是不可变的。

2:什么是初始化:为数组对象的元素分配空间,并未每个数组元素指定初始值。

3:数组的初始化的两种方式:(不管采用哪种方式,一旦初始化完成,数组的长度就不可改变)

4:动态初始化时,系统指定初始值,系统的分配初始值的规则。

三:数组一定要初始化吗?

四:数组变量和数组对象

(1)什么是数组变量,什么是数组对象。

(2)数组变量和数组对象究竟哪个需要初始化,哪个并不需要初始化?

对数组初始化是对数组变量初始化还是对数组对象初始化?

五:基本类型数组的初始化

1:基本类型数组的初始化:程序直接先为数组分配内存空间,在将数组元素的值存入对应内存中。

2:基本类型数组初始化简单的原因:数组元素的值直接在对应的数组元素中。

3:注意:基本类型变量的值存储在栈内存中,这句话是完全错误的。

4:java语言中,堆内存中的对象,通常不允许直接访问。为了访问堆内存中的对象,通常只能通过引用变量。

5:最容易混淆的是:引用变量何时只是栈内存中的变量本身,何时又变为引用实际的java对象。

六:引用类型数组的初始化


一:数组的初始化(java语言的数组变量是引用类型的变量。)

二:java数组是静态的。

1:java的数组是静态的:当数组初始化时,该数组的长度是不可变的。

2:什么是初始化:为数组对象的元素分配空间,并未每个数组元素指定初始值。

3:数组的初始化的两种方式:(不管采用哪种方式,一旦初始化完成,数组的长度就不可改变)

静态初始化:初始化时用程序员显式指定每个数组元素的初始值,由系统决定数组长度。

动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。

4:动态初始化时,系统指定初始值,系统的分配初始值的规则。

——byte,short,int,long类型的数组,数组元素的值0.

——float,double类型的数组,数组元素的值0.0。

——char类型的数组,数组元素的值'\u0000'。

——引用类型(类,接口,数组),数组元素的值null。

java数组不初始化是否可以使用:不可使用。

 

 

 

三:数组一定要初始化吗?

java的数组变量是引用类型的变量,它并不是数组对象本身,只要让数组变量指向有效的数组对象。

(真正掌握了java数组在内存中分配机制,可以换一个方式来初始化数组,或者说,数组无需经过初始化)

 

package kejian;

/**
 * Created by 20378 on 2018-10-30.
 */
public class lianxi {
    public static void main(String[] args){
        int[] nums=new int[]{3,5,20,12};
        System.out.print("nums数组的元素:");
        for(int i=0;i<nums.length;i++){
            System.out.printf("  "+nums[i]);
        }
        System.out.println();
        int[] price;
        price=nums;
        System.out.print("price数组的元素:");
        for(int i=0;i<price.length;i++){
            System.out.printf("  "+price[i]);
        }
        System.out.println();
        price[2]=34;
        System.out.println("将price[2]修改为34");
        System.out.println("nums数组的第三个元素的值是"
                +nums[2]);
    }
}

当程序执行price=nums之后,price变量将指向nums变量所引用的数组,此时price变量和nums变量引用

同一个对象。执行后,price变量已经指向有效的内存及一个长度为4的数组对象,因此程序完全可以正常

使用price变量了。

四:数组变量和数组对象

(1)什么是数组变量,什么是数组对象。

数组变量只是一个引用变量,通常 存放在栈内存中(也可被放入堆内存中)。

数组对象就是保存在堆内存中的连续内存空间。

(2)数组变量和数组对象究竟哪个需要初始化,哪个并不需要初始化?

对数组初始化是对数组变量初始化还是对数组对象初始化?

对数组执行初始化,其实并不是对数组变量执行初始化,而是要对数组对象执行初始化——也就是为该

数组对象分配一块连续的内存空间,这块连续内存空间的长度就是数组的长度。

对于数组变量,它并不需要进行所谓的初始化,只要让数组变量指向一个有效的数组对象,程序即可正常使用

该数组变量。

 

(java程序汇总所有的引用变量,他们都不需要经过所谓的初始化操作,需要进行初始化操作的是该

引用变量所引用的对象。

比如:数组变量不需要进行初始化操作,而数组对象本身需要进行初始化操作,

对象的引用变量也不需要进行初始化,而对象本身才需要进行初始化。)

五:基本类型数组的初始化

public static void main(String[] args){
    int [] a;//在栈中定义了一个a数组变量
    //它是一个引用变量,并未指向任何有效的内存,没有真正指向的数组对象,
    //此时还不能使用数组对象。
    a=new int[]{1,2,3,4};
    //静态初始化后,系统会根据程序员指定的数组元素来决定数组的长度
}

1:基本类型数组的初始化:程序直接先为数组分配内存空间,在将数组元素的值存入对应内存中。

2:基本类型数组初始化简单的原因:数组元素的值直接在对应的数组元素中。

3:注意:基本类型变量的值存储在栈内存中,这句话是完全错误的。

实际上:所有局部变量都是放在栈内存中,不管其实基本类型的变量还是引用类型的变量,都是存储在各自

的方法栈区中,但引用类型变量所引用的对象则总存储在堆内存中。

4:java语言中,堆内存中的对象,通常不允许直接访问。为了访问堆内存中的对象,通常只能通过引用变量。

5:最容易混淆的是:引用变量何时只是栈内存中的变量本身,何时又变为引用实际的java对象。

规则:引用变量本质上只是一个指针,只要程序通过引用变量访问属性,偶或者通过引用变量来调用方法,

该引用变量将会由它所引用的对象代替。

 

六:引用类型数组的初始化

1:引用类型数组的数组元素依然是引用类型的,因此数组元素里存储的还是引用,它指向另一块内存中,这块

内存中存储了该引用变量所引用的对象。

public class lianxi {
    public static void main(String[] args){
        Person[] student;
        student=new Person[2];
        System.out.println("student引用的数组的长度:"
                +student.length);
        Person zhang=new Person();
        zhang.age=11;
        zhang.height=159;
        Person li=new Person();
        li.age=12;
        li.height=167;

        student[0]=zhang;
        student[1]=li;
        li.info();
        student[1].info();
    }
}
class Person{
    public int age;
    public double height;
    public void info(){
        System.out.println("我的年龄是:"
                +age+"我的身高是:"+height);
    }
}

 

 

注意:通过数组的length属性可以获取数组的长度,这个说法不够准确。数组的length属性应该返回

系统为该数组所分配的连续内存空间的长度。

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值