【Java学习4.6】深入数组(未完成)

这一节讲的是数组在内存中的存储机制。首先需要区分一组概念,什么是数组,什么是数组引用变量。

答:对于这个问题,可以这么解释。有这么一个东西,只要让他动起来,只要让他指向一个有效内存,他就可以访问数组元素。

其次,两者的存储方式似乎也不太一样。数据对象被存储在堆(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)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值