1. 程式人生 > > day12.07上午 arryays+記憶體分析

day12.07上午 arryays+記憶體分析

package com.sxt.day1207.array;

import java.util.Arrays;

public class Demo2 {

/* 0:陣列的概念
 *   陣列是相同型別資料的有序集合.
 *   相同型別的若干個資料,按照一定先後次序排列組合而成。
 *   其中,每一個數據稱作一個數組元素
 *   每個陣列元素可以通過一個下標來訪問它們.
 *   陣列的特點:
 *     其長度是確定的。陣列一旦被建立,它的大小就是不可以改變的。  (缺點)
 *     其元素必須是相同型別,不允許出現混合型別。(除過Object以外)
 *     陣列中的元素可以是任何資料型別,包括基本型別和引用型別。
 *     陣列中可以存放重複的元素
 * 1:陣列的定義以及初始化
 *   1.1 :動態初始化
 *     資料型別[]  陣列名  = new 資料型別[陣列長度];
 *   1.2:靜態初始化
 *     資料型別[]  陣列名  = new 資料型別[]{元素1,元素2..};  
 *   1.3:靜態初始化
 *     資料型別[]  陣列名  = {元素1,元素2..};  
 * 2:獲取元素
 *    根據陣列的下標獲取元素  陣列名[下標]  
 *    注意:下標從0開始,到陣列長度-1結束
 *    [0,陣列.length-1] 
 * 3:獲取陣列的長度  (長度是陣列的屬性)
 *      陣列名.length  
 * 4:陣列的遍歷:陣列的迭代,依次將陣列中的元素獲取
 *   4.1 :普通for迴圈
 *    for(int i = 0;i<陣列.length;i++){
 *      System.out.println(arr[i]);
 *    }
 *   4.2 :for-each  jdk1.5新特性
 *    for(陣列的資料型別   變數名:陣列名){
 *      System.out.println(變數名);
 *    }
 *   普通for迴圈和for-each迴圈的區別
 *   1:共同點:都可以依次遍歷元素
 *   2:不同點
 *      2.1:for-each遍歷的效率比普通for迴圈高
 *      2.2: 普通for迴圈根據下標獲取元素
 *           for-each沒有下標,宣告一個臨時的變數來儲存元素
 *      2.3:普通for迴圈在遍歷的同時還可以對陣列做修改     
 *          for-each迴圈在遍歷的同時不可以對陣列做修改     
 *      2.4:for-each只有一個功能:就是遍歷元素    
 *    
 *   
 * 5:陣列的記憶體分析
 * 
 * 
 */
public static void main(String[] args) {
	
	//1:宣告陣列
	  int[] score;//宣告一個整型的陣列,陣列名叫score
	  //int score2[];
	//2:初始化陣列
	  score = new int[5];  //建立一個長度為5的陣列 (在堆記憶體中開闢一塊大小為5的空間)
	 //3:給陣列儲存資料 
	  score[0] = 100;
	  score[1] = 99;
	  score[2] = 98;
	  score[3] = 97;
	  score[4] = 100;
	 // score[5] = 85;//第六個  ArrayIndexOutOfBoundsException  陣列下標越界
	  
	  //4:定義陣列,並初始化  動態初始化 (根據陣列的長度來確定元素的個數)
	  String[] str = new String[3];
	  str[0] = "a";
	  str[1] = "b";
	  str[2] = "c";
	  //5:定義陣列,並初始化 靜態初始化 (根據元素的個數來確定陣列的長度)
	  String[] str2 = new String[]{"a","b","c"};
	  //6:定義陣列,並初始化 靜態初始化 (根據元素的個數來確定陣列的長度)  直接賦值法
	  String[] str3 = {"a","b","c"};
	  //7:獲取陣列的元素 (根據下標獲取陣列元素)
	  System.out.println(str3[2]);
	  System.out.println(str3[1]);
	  System.out.println(str3[0]);
	  //8:獲取陣列的長度
	  System.out.println(str3.length);
	 // String[] str3 = new String[3]{"a","b","c"};//錯誤,不能同時寫長度以及元素
	  //9:遍歷陣列
	  int[] arr = {10,20,30,40,50,100};
	 /* System.out.println(arr[0]);
	  System.out.println(arr[1]);
	  System.out.println(arr[2]);
	  System.out.println(arr[3]);
	  System.out.println(arr[4]);
	  System.out.println(arr[5]);
	  */
	  //從下標為length-1開始迴圈,倒迴圈
		for(int i= arr.length-1;i>=0;i--){
			 System.out.println(arr[i]);
		}
		System.out.println("-------------------");
		
		
		
		
		
		
		//從下標為0開始迴圈
	/*	for(int i = 0;i<arr.length;i++){
			System.out.println(arr[i]);
			arr[i] = 300; //修改  重新賦值
		}
		*/
		
		System.out.println("-------------------");
	   //for--each迴圈
		for(int a:arr){
			System.out.println(a);
			a = 200;
		}
	  
		System.out.println(Arrays.toString(arr));
		
	 /* int i = 0;
	  while(i<arr.length){
		  System.out.println(arr[i]);
		  i++;
	  }
	*/
	
	
}

}

***** 陣列的記憶體分析****
public class Demo3 {

/*
 * 陣列的記憶體分析
 * JVM記憶體
 *   JVM記憶體結構主要有三大塊:堆記憶體、方法區和棧。
 *   1:堆記憶體是JVM中最大的一塊由年輕代和老年代組成,而年輕代記憶體又被分成三部分,Eden空間、From Survivor空間、To Survivor空間,預設情況下年輕代按照8:1:1的比例來分配;
 *   2:方法區儲存類資訊、常量、靜態變數等資料,是執行緒共享的區域,為與Java堆區分,方法區還有一個別名Non-Heap(非堆);
 *   3:棧又分為java虛擬機器棧和本地方法棧主要用於方法的執行。
 *   
 *   陣列:是java中的引用型別
 *    執行列印陣列的變數名:引用地址符
 *    引用地址符=資料型別[email protected]+hashCode16進位制
 *    通過棧中的地址符找到堆中實際的記憶體空間,指向頭地址(下標為0的元素的地址符)
 *    
 *   在堆中開闢好空間之後,陣列有預設值
 *    整型陣列:0
 *    浮點型:0.0
 *    char:0
 *    布林型別:false
 *    引用型別:null 
 *    
 * 
 */

public static void a(){
	System.out.println("aaa");
}
public static void main(String[] args) {
	//宣告一個int型別的變數
	int[] arr;
	//初始化陣列  (在堆記憶體中開闢空間)
	arr = new int[5];
	//列印這個陣列的變數  [[email protected]  引用地址符=資料型別[email protected]+hashCode16進位制
	System.out.println(arr);
	
	for(int i = 0;i<arr.length;i++){
		System.out.println(arr[i]);
	}
	
	
	double[] d = new double[2];
	System.out.println(Arrays.toString(d));
	
	boolean[] b = new boolean[2];
	System.out.println(Arrays.toString(b));
	
	String[] s = new String[2];
	System.out.println(Arrays.toString(s));
	
	
	
	
	
	
	
	
	
}

}