天天看點

byte數組轉double_0008.數組001

1.數組

1.1.數組的定義

數組就是一個存放【相同資料類型】的【有序】集合(容器)。
           

1.2.數組的聲明

文法1: 資料類型[] 變量名;
      int[] arr1;
      String[] arr2;    
​
 文法2:資料類型  變量名[];
      int arr1[];   
      String arr2[];
  注意事項:
    a)建議聲明數組的時候,采用第一種聲明數組的方式。
    b)“資料類型[]”代表的就是數組類型,例如:int[]代表int類型的數組。
    c)為什麼聲明數組的時候需要“資料類型”???使用“資料類型”聲明數組,代表數組中每個元素都是該資料類型
         int[] arr1; ---> 數組中每個元素都是int類型
           

1.3.數組的建立

強調:資料屬于引用資料類型。
  方式一:動态建立數組,也就是使用new關鍵字來建立數組
    文法:  資料類型[] 變量名 = new 資料類型[數組長度];
         int[] arr = new int[5];
​
  方式二:靜态建立數組
    文法1:資料類型[] 變量名 = {資料1, 資料2, 資料3, ...};
         String[] arr = {"aa", "bb", "cc", "dd"};
    文法2:資料類型[] 變量名 = new 資料類型[]{資料1, 資料2, 資料3, ...};
         String[] arr = new String[]{"aa", "bb", "cc", "dd"};
    了解:不但要建立一個指定空間大小的數組,而且在建立數組的同時還完成了數組的每個元素指派操作
     注意事項:
        a)“靜态建立數組”的方式無需設定數組的空間長度,因為“靜态建立數組”的方式數組的空間長度由設定的元素個數決定。
        b)直接使用“{}”建立數組的方式(靜态建立數組方式一)不能直接作為方法的實參和傳回值!
            因為:編譯器不認識{}建立的數組。
 補充:建立數組,本質上就是在記憶體中開辟記憶體空間,準備用來存儲數組元素。    
           

1.4.數組的簡單操作

核心:通過數組名找到數組在記憶體中的存儲空間,然後通過“索引值”找到數組中某一個格子,然後再操作格子中的元素。
  文法:數組名[索引值]     
           

1.5.數組的相關注意事項

a)操作數組的時候,索引不能越界,否則抛出“java.lang.ArrayIndexOutOfBoundsException”
    索引合法區間:[0, 數組長度-1]
​
 b)數組存儲的元素的資料類型必須和聲明數組的資料類型保持一緻。
    int[] arr = new int[5];
    arr[0] = "11";  // 錯誤 
    arr[1] = 22;    // 正确
 c)建立數組的時候必須明确數組的空間長度,數組一旦建立成功,那麼數組的空間長度也不能改變了!
    補充:屬于數組資料類型的核心特點。
 d)聲明數組的資料類型可以是任意資料類型,可以是基本資料類型,也可以是引用資料類型
    int[] arr1 = new int[5];
    String[] arr2 = new String[10];
           

1.6.數組元素的預設值

重點強調“動态建立數組”這種方式的每個元素預設值。  
      整數(byte、short、int和long)類型的數組的預設值為為0;
      小數(float和double)類型的數組的人預設值為0.0;
      boolean類型數組的預設值為false ;
      char類型數組的預設值為“u0000”,就是一個空格;
      引用資料類型數組的預設值為null,null是空對象的意思。
  強調:以上預設值必須記住,後面面向對象還會用!!!
           

1.7.數組常見屬性

length屬性,用于擷取數組的空間長度值。  
           

1.8.使用普通for循環周遊數組

技能:循環 + length屬性      
           

1.9.for-each循環

可以周遊數組中的元素,還可以周遊集合中的元素(集合後面學習)。
  文法:  for(資料類型  變量名 : 數組|集合) {
             // 循環體
         }
​
  優勢:文法簡潔,并且效率較高。
  劣勢:循環過程中無法擷取數組的索引值,索引在循環體中不能修改元素的值。       
  建議:如果隻需要周遊數組中元素,那麼建議使用for-each循環
       如果不但要擷取數組中的元素,還要修改數組中的元素值,那麼建議使用普通for循環。
           

1.10.JVM中的堆和棧(重點)

byte數組轉double_0008.數組001
2.随堂練習及記憶體分析
a)擷取10個學生的成績,然後儲存在數組中,最後計算學生的總分和平均分。  
           
byte數組轉double_0008.數組001
byte數組轉double_0008.數組001

3.目前已經接觸到的異常???

java.lang.NullPointerException ---> 空指針異常
    原因:對一個空對象進行操作,就會抛出空指針異常
    
java.lang.ArrayIndexOutOfBoundsException ---> 數組索引越界異常
    原因:操作數組的索引越界,索引合法區間:[0, 數組長度-1]
​
 java.lang.ArithmeticException --> 算數異常
    原因:分母為0。
以上三個異常都屬于運作時(在虛拟機執行代碼)的時候抛出的錯誤(異常),編譯的時候沒有任何問題。
           

4.資料結構

4.1資料結構和算法

資料結構:數組、連結清單、圖、棧、隊列、哈希表、二叉樹
           

4.2.數組的資料結構

核心特點:
   a)數組是一塊連續的記憶體空間
   b)數組一旦建立成功,空間長度就不能改變了
   數組的優勢和劣勢 
        優勢:通過索引來查找速度非常非常快!  
        劣勢:插入和删除效率低下
            需要自己手動實作數組擴容操作。     
           

5.關于static修飾方法的調用

本類中:直接使用“方法名()”調用即可。
   在别的類中:通過“類名.方法名()”來調用 
           

6.java提供的數組工具類

java.util.Arrays,使用Arrays工具類的時候需要導包。
           

7.Arrays工具類中常見的方法

public static String toString(int[] a) 
        --> 輸出數組中的元素,也就是把數組中的元素轉化為字元串輸出。
        
    public static void sort(int[] a) 
        --> 對數組中的元素進行排序(預設為升序)
        
    public static int binarySearch(int[] a, int key)
        --> 對數組執行二分查找。如果查找失敗,那麼傳回一個負數。
        
    public static int[] copyOf(int[] original, int newLength) 
        --> 從被拷貝的數組的第一個元素開始拷貝
            original:被拷貝的數組。newLength:拷貝數組的長度
            傳回:傳回拷貝完成的新數組。
            
    public static int[] copyOfRange(int[] original, int from, int to)
        --> 拷貝指定範圍元素的數組
            original:被拷貝的數組。from:從哪個位置開始拷貝(包含)。to:拷貝到那個位置結束(不包含) 
            
    System.arraycopy(src, srcPos, dest, destPos, length)
        --> 拷貝數組
            src:源數組,需要被拷貝的數組。 srcPos:從源數組哪個位置開始拷貝。dest:目标數組,拷貝之後的數組。 destPos:把元素拷貝到目标數組的哪個位置開始。 length:需要拷貝的長度
            
    public static void fill(int[] a, int val)
        --> 數組元素填充
        
    public static boolean equals(int[] a, int[] a2)
        --> 判斷兩個數組的内容是否相同
            如果相同則傳回true,如果不相同則傳回false
           

8.main方法的形參(了解)

8.1執行程式的時候,如何給main方法傳遞實參???

方式一:通過DOS命名傳遞實參   
       java MainArgsTest abc 111 ddd    
      方式二:通過Eclipse來傳遞實參
            滑鼠右鍵 --> Run As --> java config...  --> arguments   --> 填寫參數
           

8.2給main方法傳遞實參的作用???

需求:實作兩個檔案的拷貝操作。
    解決:需要兩個檔案的路徑,其中一個就是需要拷貝檔案的路徑,另外一個就是檔案拷貝到哪裡去的路徑。
        怎麼得到兩個檔案的位址???可以通過給main方法傳遞實參。
           

8.3main方法的注意事項

作用:是程式的入口,寫法固定,能被虛拟機識别并執行。
    現實開發中,我們能夠手動的去調用main方法嗎???  不能。
           

9.可變參數

需求1:實作兩個整數的加法運算
​
需求2:實作三個整數的加法運算
​
需求3:實作多個整數的加法運算,至少有兩個以上的整數參與
解決1:方法的參數中包含一個int類型的數組。
        雖然能解決問題,但是還是有缺陷。
解決2:使用可變參數來實作。
​
1.方法的可變參數文法
      方法的聲明:public static int add(int a, int b, int ... arr) {}
      方法的調用: add(1, 2, 3, 4, 5, 6, 7);
2.可變參數的注意點
      a)在方法體中,可變參數可以當成數組的方式來操作。
      b)調用可變參數方法的時候,傳遞的實參可以是任意多個,隻需要實參和可變參數的類型比對即可。
      c)在一個方法中,最多隻能有一個可變參數(0, 1),并且可變參數必須放在形參清單的末尾。  
      d)public static int add(int a, int b, int[] arr) {}
        public static int add(int a, int b, int ... arr) {} 不構成方法重載!
​
​
           

10.二維數組

10.1什麼是二維數組??

二維數組中的每個元素又是一個一維數組 。
  {1, 2, 3}  --> 一維數組   
​
  {{1, 2, 3}, {3, 4, 5}, {6, 7, 8}} --> 二維數組
           

10.2.二維數組的聲明

方式一:資料類型[][] 變量名; 
        int[][]  arr1;
      String[][] arr2;
   方式二:資料類型[]  變量名[]; 
        int[]   arr1[]; 
      String[]  arr2[]; 
​
  建議:聲明二維數組的時候,建議使用第一個方式來聲明。
           

10.3.二維數組的建立

方式一:建立等長的二維數組,二維數組中的每一個元素(一維數組)元素個數一樣多。  
        文法:資料類型[][] 變量名 = new 資料類型[m][n];
        m:代表二維數組的長度,也就是指的二維數組中包含了多少個一維數組
        n:代表二維數組中的每個元素(一維數組)的元素個數,也就是代表一維數組的長度。
        
  方式二:建立不等長的二維數組, 二維數組中的每一個元素(一維數組)元素個數可以不一樣
       文法:資料類型[][] 變量名 = new 資料類型[m][];
        m:代表二維數組的長度,也就是指的二維數組中包含了多少個一維數組
        什麼時候決定元素(一維數組)的空間長度???指派的時候來決定
        
  方式三:靜态二維數組   
    文法1:資料類型[][] 變量名 = new 資料類型[][]{{資料01, 資料02, 資料03, ...}, {資料11, 資料12, 資料13,}, ...};
    文法2:資料類型[][] 變量名 = {{資料01, 資料02, 資料03, ...}, {資料11, 資料12, 資料13,}, ...};     
           

繼續閱讀