首页 > 技术文章 > Java数组

yellowchives 2021-08-27 17:45 原文

//java中使用数组
public class Array {
    public static void main(String[] args) {
		//动态初始化,只给定数组长度,由系统给出默认初始化值
        int[] nums;//声明一个数组,在栈中存放一个地址
        nums = new int[3];//创建一个数组,在堆里开辟空间,栈的地址指向堆
		//也可以合起来写:int[] nums = new int[3];
        nums[0]=1;
        nums[1]=2;
        nums[2]=3;
		
		//静态初始化
		int[] arr1 = new int[]{1,2,3,4,5};//java也支持c语言的这种写法:int arr[5];
		//静态初始化的简化写法
        int[] arr2 = {1,2,3,4,5};

        //不要同时使用静态初始化和动态初始化,也就是说,不要在进行数组初始化时,
		//既指定数组的长度,也为每个数组元素分配初始值。int[] nums = new int[3]{1,2,4};会报错

		//注意:静态初始化只能合在一起写,分开会出错。
		//int[] nums; nums = {1,2,3,4}; 这样写会出现array initializer is not allowed here
		
        //多维数组
        int[][] matrix = {{1,3,4},{2,3,4},{3,4,5},{3,3,4}};
        //打印二维数组
        System.out.println("==================");
        for(int i = 0; i < matrix.length; i ++){
            for(int j = 0; j < matrix[0].length; j ++){
                System.out.print(matrix[i][j] + "\t");
            }
            System.out.println();
        }
        //也可以使用foreach语句打印
        System.out.println("==================");
        for(int[] ints:matrix){
            for(int num:ints) {
                System.out.print(num+"\t");
            }
            System.out.println();
        }
    }
}

上面的静态初始化简化版本很有可能出错,比如:在类的成员变量里声明了一个数组 int[] elementData,但未进行初始化。 在构造方法里对其初始化,试图这样写

elementData = {1,3,5} ,于是便出现了上述编译错误提示

数组除了用于保存基本数据类型的变量,还可以保存引用数据类型的变量,称为对象数组。

public class Person {
    String name;
    
    public Person(String name) {
        this.age = age;
    }
}

public class ClassArray {
    public static void main(String[] args) {
        Person[] persons = new Person[]{new Person("Jack"),new Person("Mary"),new Person("Tom")};//静态初始化
        //动态初始化:Person[] persons = new Person[3];persons[0]= new Person("Jack");
    }
}

Java中的内存分配

区域名称 作用
寄存器 给CPU使用,和我们开发无关。
本地方法栈 JVM在使用操作系统功能的时候使用,和我们开发无关。
方法区 存储可以运行的class文件。
堆内存 存储对象或者数组,new来创建的,都存储在堆内存。
方法栈 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。

推荐阅读