第三章-Java基础(数组)

数组

概念

      同一种类型数据的集合.其实数组就是一个容器.

数组的好处

      可以自动给数组中的元素从0开始编号,方便操作这些元素

格式1

      元素类型[] 数组名  = new 元素类型[元素个数或数组长度];

      示例: int[] arr = new int[5];

格式2

      元素类型[] 数组名 = new 元素类型[]{元素,元素,....};

      int[] arr = new int[]{3,5,1,7};

      int[] arr = {4,5,1,6};

例子:

      

public class ArrayDemo {

	public static void main(String[] args) {
		//元素类型[] 数组名  = new 元素类型[元素个数或数组长度];
		int[] arr = new int[3];
		
		//打印出来的都是0,因为只定义该数组的长度和个数(角标长度)并没有向具体角标中赋值
		//打印出来的数据都是默认值0
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		
		//给数组第0个角标赋值
		arr[0]=89;
		//打印结果为89
		System.out.println(arr[0]);
	}
}

数组内存空间的划分

   1.寄存器(CPU来处理不用管)

   2.本地方法区(不详解由所在系统相关的)

   3.方法区(后面章节会讲)

   4.栈内存(重点)

   5.堆内存(重点)

 

理解局部变量和全局变量区别

 

public class ArrayDemo2 {

	static int	a	= 27;	// 全局变量

	static void test() {
		boolean flag = false;// flag局部变量有效范围市整方法体
		if (!flag) {
			int a = 20;// 局部变量a必须进行初始化且只if块有效
			System.out.println("a1=" + a);
		}
	}

	public static void main(String[] args) {
		int a = 23;// 局部变量a
		test();
		System.out.println("a3=" + a);
	}
}

  1.对于局部变量要先赋值后使用

   2.局部变量局部有效,在定义着个变量的代码块就是在{}中有效

   3.成员变量只在加载的时候初始化一次 局部变量每次调用方法的时候都会被初始化

   4.成员变量存在堆中 局部变量存在栈中

 

栈内存

     存储的都是局部变量

     局部变量所属的作用域(方法)一旦调用结束,该变量就自动释放.

堆内存

     存储是数组和对象(其实数组就是对象)凡是new出来的都放在堆中

     如图:

         
第三章-Java基础(数组)


第三章-Java基础(数组)
 


第三章-Java基础(数组)
 下面这个是给引用数据类型进行设置为null,如果基本数据类型都是null,它也就指向null了,那堆中没有引用指向的数据就成为垃圾数据,由于java垃圾收集器不定时回收,就向办公室中有阿姨来不定时回收垃圾道理一样

第三章-Java基础(数组)

     特点:

      1.每个实体都有首地址值

      2.堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同.整数是0,小数是0.0.或者0.0f.boolean false char '\u0000'

      3.垃圾回收机制

 

堆栈内存分析


第三章-Java基础(数组)
 
第三章-Java基础(数组)
 
第三章-Java基础(数组) 

数组-第二种定义格式

      元素类型[]  数组名 = new 元素类型[]{元素,元素,....};

      int[] arr = new int[]{3,5,1,7};

      int[] arr = {4,5,1,6};

	public static void main(String[] args) {
		
		
		/*格式一
		 * 第一种用法:
		 *  需要一个容器,但是不明确容器中的具体数据
		 * */
		int[] arr=new int[3];
		
		/**格式二
		 * 第二种用法:
		 * 需要一个容器,存储已知的具体数据.
		 *  元素类型[]  数组名 = new 元素类型[]{元素,元素,....};
      		int[] arr = new int[]{3,5,1,7};
            int[] arr = {4,5,1,6};
		 */
		
		int[] arr1 = new int[]{1,2,3,4};
		int[] arr2 = {1,2,3,4};
	}

 数组-常见操作-遍历

int[] arr1 = new int[]{1,2,3,4};
		int[] arr2 = {1,2,3,4,5};
		
		for (int i = 0; i < arr2.length; i++) {
			System.out.println(arr2[i]);
		}

 反向遍历

for (int i = arr2.length-1; i >=0; i--) {
			System.out.println(arr2[i]);
		}

 获取数组中最大或最小的值

 

	public static void main(String[] args) {
		int[] arr = { 11, 33, 23, 6, 5, 88 };		
		System.out.println(getMaxNumber_2(arr));
	}
	
	//通过元素比较
	public static int getMaxNumber(int[] arr){
		
		int maxElement = arr[0];
		
		for(int i = 0 ;i<arr.length;i++){
			if(arr[i]>maxElement){
				maxElement=arr[i];
			}
		}
		return maxElement;
	}
	
	//通过角标比较
	public static int getMaxNumber_2(int[] arr){
		
		int maxElement = 0;
		
		for(int i = 0 ;i<arr.length;i++){
			if(arr[i]>arr[maxElement]){
				arr[maxElement]=arr[i];
			}
		}
		return arr[maxElement];
	}

 

查询数组指定的值

//数组查询
	public static void main(String[] args) {
		int[] arr = { 11, 33, 23, 6, 5, 88 };
		System.out.println(getMaxElement(arr,5));
	}
	
	//普通查询数组中指定的元素
	public static int getMaxElement(int[] arr,int key){
		for(int i = 0;i<arr.length;i++){
			if(arr[i]==key){
				return arr[i];
			}
		}
		return -1;
	}

 二维数组

int[][] arr = new int[3][2];
		
		System.out.println(arr);//打印二维数组 [[[email protected]
		System.out.println(arr[0]);//打印二维数组中角标为0的一维数组 [[email protected]
		System.out.println(arr[0][0]);		 //打印二维数组中角标为0的一维数组为0的值 0
		
		
		
		int[][] arr2 = new int[3][];
		
		System.out.println(arr2);//打印二维数组 [[[email protected]
		System.out.println(arr2[0]);//打印二维数组中角标为0的一维数组 null
		System.out.println(arr2[0][0]);		 //打印二维数组中角标为0的一维数组为0的值java.lang.NullPointerException
		
		int[] arr3 = new int[3];
		System.out.println(arr3);
		System.out.println(arr3[0]);

 

//二维数组
	public static void main(String[] args) {
		
		int[] arr1 = new int[3];
		//System.out.println(arr13);
		//System.out.println(arr1[0]);
		
		int[][] arr2 = new int[3][2];
		
		//System.out.println(arr2);//打印二维数组 [[[email protected]
		//System.out.println(arr2[0]);//打印二维数组中角标为0的一维数组 [[email protected]
		//System.out.println(arr2[0][0]);		 //打印二维数组中角标为0的一维数组为0的值 0
		
		
		
		int[][] arr3 = new int[3][];
		
		//System.out.println(arr3);//打印二维数组 [[[email protected]
		//System.out.println(arr3[0]);//打印二维数组中角标为0的一维数组 null
		//System.out.println(arr3[0][0]);		 //打印二维数组中角标为0的一维数组为0的值java.lang.NullPointerException
		
		
		
		int sum = 0;
		int[][]arr4={{3,1,7},{9,3,6,7},{445,7,3,1,7}};
		
		for(int x= 0;x<arr4.length;x++){
			for (int i = 0; i < arr4[x].length; i++) {
				sum+=arr4[x][i];
				System.out.print(arr4[x][i]);
			}
			System.out.println( );
		}
		System.out.println(sum);
	}