一、定义数组:
int[ ] arrayName;
二、初始化数组:
数组必须初始化,分为两种初始化方法:
(1)静态初始化:不指定长度,只指定元素

格式:数组名 = new 类型[ ] {元素1,元素2,。。。}

// 数组引用变量(栈)   数组对象(堆)
     int[] prices  =  new int[] {1,2,3,4,5};//静态初始化

int[]是一种数据类型,可用于定义变量,创建int[]类型对象也是创建数组。

简化语法(不好):只能在定义数组变量并指定初始值时使用

int a = {1,2,3,4};

(2)动态初始化::只指定长度,不指定元素
eg:

int[] prices = new int[5];//动态初始化,只指定长度,不赋值,默认0(类型不能为var)

也可以使用var来定义:

var prices = new int[5]; //这样更简洁

(3)创建数组对象(数组初始化)

定义局部变量时,可以使用var来定义,但是要指定初始值

var names = new String[] {"xiaoming" , "dingding"};

(4)数组遍历:

for(var i=0;i<prices.length;i++)
{
	System.out.println(prices [i]);
}

(5)使用foreach循环遍历数组

for(元素类型 变量名 :数组名)
{
//通过变量名访问每个元素
}
eg:

public class 使用数组 
{
	public static void main(String[] args) 
	{
		int[] iArr = new int[]{1,2,3,4};//静态初始化
		int[] Arr = new int[5];//动态初始化

		for(var it : iArr)
		{
			System.out.println(it);
		}

		for(var it : Arr)   //for循环的变量名 it 只在循环内有效
		{
			System.out.println(it);
		}
	}
}

foreach只能访问数组元素,不能修改数组元素(不要在循环中修改数组元素的值!)

(6)数组在内存中的运行机制

public static void main(String[] args) 
{
      int a=10;     //基本类型,放在栈内存中,因为是在main方法中定义的
}

int[ ] p={1,2,3,4};
——p为数组引用变量,存储在栈内存 中,数组引用变量只是一个引用(地址,指针)。
——{1,2,3,4}为实际的数组对象,存储在堆内存 中。要通过前者来访问后者!

再比如:

int[ ] arr = new int[ ] {20};

arr是引用变量,在方法中定义的,存放在栈内存中; new处理的数组存放在堆内存中,即20在堆内存中,长度为1。

如果先定义数组变量:int[ ] a;则是先在栈内存中开辟一个空的引用(指针),因而没有指向任何有效内存;此时再指定数组长度:a=new int[4];即初始化后,数组对象被分配了内存,默认为0;

(7)引用类型数组初始化
上面是基本类型数组的初始化过程,数组元素为具体的值。如果数组元素还是引用,它还要指向另一块内存。

class Person//定义一个类
{
	public int age;//对象
	public double height;
	public void information()//定义了一个方法,类似于函数
	{
		System.out.println("我的年龄是:"+age+" 我的身高是:"+height);
	}
}
public class  ArrayTest
{
	public static void main(String[] args) 
	{
		Person[ ] students=new Person[2];//定义了引用变量students,类型为Person[],并初始化
	
		var zhang=new Person();//创建Person类实例并赋给zhang变量(相当于让zhang可以引用person类)
		zhang.age=15;
		zhang.height=158;

		var lee=new Person();
		lee.age=16;
		lee.height=161;
//此时分配了4块内存,栈内存中存储两个引用变量,堆内存中存储两个Person实例

		students[0]=zhang;
		students[1]=lee;

		lee.information();
		students[1].information();

		zhang.information();
	}
}

java数组没赋值等于啥 java定义数组不赋值_System


【练习】

(1)一维数组基本操作

import java.util.*;
public class 练习题1_1
{
	public static void main(String[] args) 
	{
		int[] iArr =new int[4];//指的是个数,从1开始
		int[] Arr = new int[]{1,3,5,7};
		iArr[0]=5;
		
		System.out.print("数组iArr元素为:");
		for(var it:iArr)
		{
			System.out.print(it+"、");
		}

		System.out.print("\n"+"数组Arr元素为:");
		for(var it:Arr)
		{
			System.out.print(it+"、");
		}
	}
}

java数组没赋值等于啥 java定义数组不赋值_初始化_02


(2)二维数组基本操作

import java.util.*;
public class 练习题1_1
{
	public static void main(String[] args) 
	{
		int[][] iArr = new int[4][4];//4行4列的动态二维数组
		int[][] Arr = new int[][]{{1,2,1},{2,3,4},{4,9,7},{-1,-4,9}};//
		iArr[0][0]=7;
		iArr[1][1]=8;
		System.out.println("数组iArr的元素为:");
		for(int it[]:iArr)    //foreach遍历数组
		{
			System.out.println(Arrays.toString(it));
		}


		System.out.println("\n"+ "数组Arr的元素为:");
		for(int it[]:Arr)
		{
			System.out.println(Arrays.toString(it));
			//Arrays类中的toString函数可输出数组内容,it为地址
		}
	}
}

注意:二维数组的foreach遍历与一维数组不同,一维数组是:
for(var it : iArr)
二维数组不能用var,for(int it[] : iArr),要用Arrays类中的toString函数

java数组没赋值等于啥 java定义数组不赋值_初始化_03