1.1数组初始化

1.1.1Java数组是静态的

Java语言是静态语言,所以Java数组是静态的,当数组完成初始化后该数组的长度是不可变的。(初始化就是为数组元素分配存储空间并制定每个元素的初始值)

数组初始化有两种方式:

静态初始化:初始化时由程序员指定数组元素的初始值,有系统决定数组长度;

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

两种初始化完成后数组长度都不可改变!

package javaclass.arraytest_1_1_1;
/**
 * 
 * @author vincent
 *
 */

public class ArrayTest {

    public static void main(String[] args) {
        //静态初始化第1个数组
        String[] books = new String[] {
                      "疯狂Java讲义",
                      "轻量级JavaEE企业应用实战",
                      "疯狂ajax讲义",
                      "疯狂XML讲义"
        };
        //静态初始化的简化初始方式,初始化第2个数组
        String[] names = {"孙悟空", "猪八戒", "白骨精"};
        //动态初始化第3个数组
        String[] setArry = new String[5];
        //访问3个 数组的长度
        System.out.println("数组1长度: " + books.length);
        System.out.println("数组2长度:" + names.length);
        System.out.println("数组3长度:" + setArry.length);
    }
}

注意:数组初始化是不要既指定数组长度,又为每个数组元素分配初始值!

Java数组变量是一种引用变量,数组变量不是数组本身,它只是指向对内存中的数组对象。因此可以改变数组变量所引用的数组,这样可以造成数组长度可变的假象。

package javaclass.arraytest_1_1_1;
/**
 * 
 * @author vincent
 *
 */

public class ArrayTest {

    public static void main(String[] args) {
        //静态初始化第1个数组
        String[] books = new String[] {
                      "疯狂Java讲义",
                      "轻量级JavaEE企业应用实战",
                      "疯狂ajax讲义",
                      "疯狂XML讲义"
        };
        //静态初始化的简化初始方式,初始化第2个数组
        String[] names = {"孙悟空", "猪八戒", "白骨精"};
        //动态初始化第3个数组
        String[] setArry = new String[5];
        
        //改变数组变量所引用的数组
        books = names;
        setArry = names;
        
        //访问3个 数组的长度
        System.out.println("数组1长度: " + books.length);
        System.out.println("数组2长度:" + names.length);
        System.out.println("数组3长度:" + setArry.length);
    }
}

1.1.2数组一定要初始化吗

可以换一个方式初始化数组,或者说数组无需初始化。记住:数组变量是引用类型变量,不是数组本身,只要将 数组变量指向有效的数组对象,即可在程序中使用该数组变量。

package javaclass.arraytest_1_1_1;


public class ArrayTest3 {

    public static void main(String[] args) {
        //定义并初始化数组nums
        int[] nums = new int[] {3, 5, 20, 12};
        //定义prices数组变量
        int[] prices;
        //让prices数组变量指向nums所引用的数组
        prices = nums;
        for (int i = 0; i < prices.length; i++)
            System.out.println(prices[i]);
        //将prices数组的第三个元素赋值为34
        prices[2] = 34;
        System.out.println("nums数组的第三个元素值为:" + nums[2]);
    }
}

1.1.3基本类型数组的初始化

package javaclass.arraytest_1_1_1;

/**
 * @author vincent
 */

public class PrimitiveArrayTest {

    public static void main(String[] args) {
        // 定义一个int[]类型的数组变量
        int[] iArr = new int[] { 2, 5, -12, 20 };
        for (int i = 0; i < iArr.length; i++)
            System.out.println(iArr[i]);
    }
}

所有的局部变量都是放在栈内存中的,不管是基本类型的变量,还是引用类型的变量,都是存储在各自的方法栈区中;但引用类型变量所引用的对象总是存储在堆内存中。

Java是不允许访问堆内存中的对象,为了访问他们只能通过引用变量。(引用变量本质上只是一个指针)

package javaclass.arraytest_1_1_1;


public class PrimitiveArrayTest2 {

    public static void main(String[] args) {
        //定义一个int[]类型的数组变量
        int[] iArry = null;
        //只要不访问iArry的属性和方法,程序完全可以使用该数组变量
        System.out.println(iArry);
        //初始化数组
        iArry = new int[5];
        //只有当iArry指向有效的数组对象后,才可以方位iArry的属性
        System.out.println(iArry.length);
    }
}

1.1.4引用类型数组的初始化

引用类型数组的数组元素依然是引用类型的,因此数组元素里存储的还是引用,它指向另一块内存,这块内存里存储了该引用变量所引用的对象

package javaclass.arraytest_1_1_1;


public class ReferenceArratTest {

    private static Person[] students;

    public static void main(String[] args) {
        //定义数组变量students,类型是Person[]
        students = new Person[2];
        System.out.println("students所引用的数组的长度是:" + students.length);
        
        //创建一个Person实例
        Person zhang = new Person();
        zhang.age = 15;
        zhang.height = 165;
        
        Person lee = new Person();
        lee.age = 16;
        lee.height = 170;
        
        students[0] = zhang;
        students[1] = lee;
        
        //下面两行代码的结果完全一样,因为lee和students[1]指向同一个Person实例
        lee.info();
        students[1].info();
    }
}

class Person {
    public int age;
    public int height;
    public void info() {
        System.out.println("age:" + age + "  height:" + height);
    }
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值