这一节讲的是数组在内存中的存储机制。首先需要区分一组概念,什么是数组,什么是数组引用变量。
答:对于这个问题,可以这么解释。有这么一个东西,只要让他动起来,只要让他指向一个有效内存,他就可以访问数组元素。
其次,两者的存储方式似乎也不太一样。数据对象被存储在堆(heap)内存中,然而引用该数组对象的引用变量是存储在占栈内存中的。特别要说明的是在局部变量中,都是放在栈内存中的,用完即被销毁。堆内存会被反复利用最后清除。只有当一个引用变量没有被任何东西引用的时候,系统的垃圾回收器才会回收他。
package homework;
public class mydemo {
public static void main(String[] args) {
int[] a = {5,7,20};
int[] b = new int[4];
System.out.println("b数组的长度是" + b.length);
for(int i = 0 ,len = a.length ; i < len ; i++)
{
System.out.println(a[i]);
}
for(int i = 0 ,len = b.length ; i < len ; i++)
{
System.out.println(b[i]);
}
//将a的数值给了b//
b = a ;//b引用指向a引用指向的数组//
System.out.println("b数组的长度是" + b.length);
}
}
输出的效果:b数组的长度是4
5
7
20
0
0
0
0
b数组的长度是3
这一段其实就讲了两个东西。数组引用变量和数组本身。不知道这个例子解释的正确不正确:a[1] = 10。a[1]被称为数组引用变量,10代表数组本身。
二、基本类型数组的初始化
下面这个东西定义了int[]初始化,采用动态初始化的方式初始化了该数组。
package homework;
public class mydemo {
public static void main(String[] args) {
//定义一个int[]类型的数组变量//
int[] iArr;
iArr = new int[5];//在这里处理的时候所有的数据全是0.//
for(int i = 0 ; i < iArr.length ; i++)
{
iArr[i] = i + 10 ;
}
}
}
三、引用类型数组的初始化
举个例子,这里使用了一个Person类,这是一个person类数组。
package homework;
class Person{
public int age;
public double height ;
public void info()
{
System.out.println("我的年龄是:" + age + ",我的身高是:" + height);
}
}
public class mydemo {
public static void main(String[] args) {
Person[] students;
students = new Person[2];
Person zhang = new Person();
zhang.age = 15 ;
zhang.height = 158 ;
Person lee = new Person();
lee.age = 16 ;
lee.height = 161 ;
students[0] = zhang ;
students[1] = lee ;
lee.info();
students[1].info();
}
}
四、没有多维数组
它的意思就是,本质上,二维数组就是一维数组的变形。
package homework;
public class mydemo {
public static void main(String[] args) {
int[][] a ;
a = new int[4][];
for(int i = 0 , len = a.length ; i < len ; i++)
{
System.out.println(a[i]);
}
a[0] = new int[2];
a[0][1] = 6 ;
for(int i = 0 , len = a[0].length;i<len;i++)
{
System.out.println(a[0][i]);
}
}
}
五、Java8增强工具类:Arrays
这是一个数据包。你可以通过调用这个数据包来去使用这里面的工具函数,下面依次举例说明。(大多是static的函数),这里我直接上代码了就不再过多解释了。
import java.util.Arrays;
public class mydemo {
public static void main(String[] args) {
int [] a = new int[] {3,4,5,6};//定义一个数组//
int [] a2 = new int[] {3,4,5,6};//定义一个数组//
System.out.println("a的数组和a2数组是否相等:"+ Arrays.equals(a, a2));//a和a2数组的长度相等,每个元素一次相等,将输出true
int [] b = Arrays.copyOf(a, 6);//通过复制a数组,生成一个新的b的数组
System.out.println("a数组和b数组是否相等:"+ Arrays.equals(a, b));//输出b的数组的元素,将输出[3,4,5,6,0,0]
System.out.println("b元素的数组元素为"+ Arrays.toString(b));
Arrays.fill(b,2,4,1);//第3个元素(包括)到第5个元素(不包括)赋值为1
System.out.println("b数组的元素为:"+ Arrays.toString(b));//[3,4,1,1,0,0]
Arrays.sort(b);//对b数组进行排序//
System.out.println("b数组的元素为:" + Arrays.toString(b));//[0,0,1,1,3,4]
}
}
不知道为什么这个也是不能跑。。。。也有报错
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
at homework.mydemo.main(mydemo.java:4)