java里面的数组定义、内存分配与初始化以及jvm内存结构

java数组定义

      java里面的数组有两种定义方式,java里面的任意数据类型都可以构造该类型的数组,这里就以String类型来举例说明。

		String[] arr1;
		String  arr2[];

        两种定义数组的方式区别在于"[]"的位置,这两种数组定义的方式是完全一样的,当然你如果在"[]"的左边加上空格也不会报错,但是约定,在java里面有句话叫做“约定大于配置”,用在这里虽然不甚恰当,但是它从另一个方面突出了约定的重要性,数组的定义约定不要在"[]"左边加上空格。

数组的内存分配

        在定义好了数组之后,并不是说就可以直接访问数组了,如果你正在使用ide编写这个程序,你会发现ide会给你提示错误信息。这是因为定义好的数组jvm并没有给它分配内存空间,自然也就无法访问了,因此要想正常使用定义好的数组,需要你给它分配内存空间,指定数组的长度就是给数组分配了内存,分配的方法如下:

		String[] arr1;
		String  arr2 [];
		arr1=new String[3];
		arr2=new String[2];

上边的这种写法还可以与数组的定义合并起来,即:在数组定义的时候就给它分配好内存空间,这也是常用的写法:

		String[] arr1=new String[3];
		String  arr2 []=new String[2];

数组的初始化

        在指定了数组的长度之后,执行下面的代码:

System.out.println(arr1[0]);

你会发现输出结果为:null,你并没有给数组里面的任何一个元素赋值,这就是输出null的原因,这里的null就是String类型的默认值,每种类型的数组里面的元素都有默认值,根据数据类型的不同而不同,比如:

        byte等整型默认为0,

        float、double默认为0.0,

        char默认空格,

        引用类型默认null

我们定义了数组当然不只是为了使用它的默认值,因此我们就需要给数组手动赋值,这个过程叫做“数组的初始化”。

要知道一点:java里面的数组有个特点,就是你要存放几个元素,就定义多长,定义了长度之后,则这个数组的长度不可以被改变,即java里面的数组是固定长度的。

java里面的数组初始化有两种方式:

        1.静态初始化:数组的长度大小在编译期间就被确定了,java编译器会根据你写的元素个数与类型确定数组所占的内存空间,比如:int[] numbers=new int[]{1,2};编译器知道int类型在java里面占据4B(4个字节)的内存空间,而numbers这个数组有两个元素分别是“1”,“2”,那么java编译器就能确定numbers占据的内存大小是8个字节。如果你写成了int[] numbers=new int[2]{1,2}; 编译器会告诉你Cannot define dimension expressions when an array initializer is provided,意思就是“你在数组定义的时候已经初始化了,我能算出来将来为这个数组分配多大的内存空间,你现在又给我显式指定一个数组长度,以为我不会算吗,当我傻吗?”,意思就是这个意思了。  

        2.动态初始化

举例如下:

        //静态初始化,也可简写:String[] names={"a","b"};

        String[] names=new String[]{"a","b"};

        //动态初始化

        int [] scores=new int[3];

        scores[0]=180;

        System.out.println(scores[1]);//结果:0

多维数组

        //动态初始化,二种方式

        int [][] scores=new int[3][4];

        //也可以用下面的方式写

        int [][] scores1=new int[3][];

与Java相关的内存结构

栈:局部变量(形参也是)、对象的引用,函数栈帧

堆:new出来的对象(伊甸园、幸存者乐园、年老区、永久代等)+方法区

方法区的概念:

方法区(代码段/模板、类):静态变量(静态域)、常量池(每个字符串当然也有地址:常量池地址,常量池值的共享)、方法、类的信息(一堆属性,方法)、包名,属于堆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值