天天看點

JAVA學習第四課(數組)

數組:

同一類型資料的集合,即一種容器。

定義方式:

int[] atrr = new int[5];//int 型數組 數組名arr ,new動态開辟  int[5],數組大小為5,隻能存放5個元素,

下标0-4

數組定義後在記憶體中的基本分布:

記憶體的劃分:

1.寄存器 -> CPU

2.本地方法區,與所在系統相關

3.方法區

4.棧記憶體:

       存儲的都是局部變量,且變量所屬的作用域一旦結束,目前變量就會自動釋放,是以

       棧記憶體更新速度很快,因為棧内變量的生命周期都很短(結束就釋放)。

例如:局部代碼塊,其限定局部變量的生命周期,在某些大程式裡,main函數不結束

其中的變量就不釋放,是以引用局部代碼塊。

示例代碼:

[html] 

view plain

copy

import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;  

public class Main   

{  

    public static void main(String[] args)  

    {  

        int[] arr = new int[6];  

        System.out.println(arr[1]);  

        {//局部代碼塊,在{}中age有效,{}執行玩age自動釋放  

            int age = 3;  

            System.out.println(age);  

        }  

        System.out.println();  

    }  

}  

5.堆記憶體:、

堆中存儲的是對象(數組),凡是new建立的都在堆中,堆不會随時釋放,堆中存儲實體,實體中裝載資料,資料中一個損壞,其他的資料依然可以用。而棧一個資料損壞,其他的都不使用

特點:

1.堆中每一個實體都有首位址值。

2.堆記憶體中每一個局部變量都有預設的初始化值,根據類型的不同,初始化值也不同,例如:int型是0,float 是0.0f\0.0,boolean 是false,char 比較特殊 '\u0000',\u  轉義,unicode

3.釋放方式:垃圾回收機制

如圖:                                                     x = y;

JAVA學習第四課(數組)
JAVA學習第四課(數組)

null:

當不想使用arr實體時,arr是數組,若想讓arr不做任何實體指向,arr = null,但是堆不會釋放arr的位址,

将其視作垃圾。堆裡面的垃圾是在不定時自動回收垃圾,故java在記憶體管理方面優于C++。

        int[] arr = new int[]{1,1,1,1,1,1};  

        arr = null;//當引用型變量沒有任何實體指向時,還引用該實體,就會引發異常  

        System.out.println(arr[2]);  

數組使用小練習:

        int[] arr = new int[5];  

        int [] b = new int[5];  

        arr[0] = 5;  

        b[0] = 6;  

        b[3] = 15;  

        System.out.println("arr[0] = "+arr[0]);  

        System.out.println("arr[3] = "+arr[3]);  

        arr = b;//更改arr的指向  

        System.out.println("b[3] = "+b[3]);  

        System.out.println("b[0] = "+b[0]);  

        b = null;//b無指向  

        //System.out.println("b[3] = "+b[3]);以視為垃圾  

        //System.out.println("b[0] = "+b[0]);  

使用數組容易遇見的小問題

        System.out.println(arr);//[I@15db9742,15db9742是arr存儲的哈希值,[->數組,I -> int型  

        //是以,在我們不知道,目前實體是什麼類型的實體時,就可以直接目前該實體的名字  

數組的另一種定義方式:

格式2:已知數組元素,隻是需要一個容器來存儲

    //  int[] b = new int[]{1,2,3,4,5};同下  

        int b[] = {1,2,1,3,4,7,8,9,4,1,2,5,6,7,4,5,1,2,3,6};//同上  

        int len = b.length;  

        for(int i = 0;i<len;i++)  

        {  

            System.out.println("b["+i+"]= "+b[i]);  

數組練習:

進制轉換

import java.awt.print.Printable;  

import java.util.Arrays;  

import java.util.Scanner;  

import javax.swing.text.DefaultEditorKit.InsertBreakAction;  

/* 需求:  

 * 擷取一個整數的X進制的表現形式  

 * */  

        Scanner cin = new Scanner(System.in);  

        int num = cin.nextInt();  

        int ary[] = new int[8];  

        getx(num,ary,15,4);//16進制  

        System.out.println("16進制表現形式如下:");  

        print(ary);  

        int bry[] = new int[12];  

        int num1 = cin.nextInt();  

        getx(num1,bry,7,3);//8進制  

        System.out.println("8進制表現形式如下:");  

        print8(bry);  

        System.out.println("6的2進制表現形式如下:");  

        System.out.println(Integer.toBinaryString(6));  

        System.out.println("-6的2進制表現形式如下:");  

        System.out.println(Integer.toBinaryString(-6));  

        cin.close();  

    public static void print(int[] ary)  

        int i;  

        for(i = 7;i>=0;i--)  

            if(ary[i]!=0)  

                break;  

        for(int j = i;j>=0;j--)  

            if(ary[j]>9)  

            switch (ary[j])   

            {  

            case 10:System.out.print("A");  

            case 11:System.out.print("B");  

            break;  

            case 12:System.out.print("C");  

            case 13:System.out.print("D");  

            case 14:System.out.print("E");  

            case 15:System.out.print("F");  

            default:  

            }  

            else {  

                System.out.print(ary[j]);;  

    public static void print8(int bry[])  

        for(i = 10;i>=0;i--)  

            if(bry[i]!=0)  

            System.out.print(bry[j]);  

     public static void getx(int num,int ary[],int mod,int wz)  

        int l = 0;  

        for(int i = 0;i<8;i++)  

            int t = num & mod;//16進制的最大值  

            ary[l++] = t;  

            num = num >>> wz;//4個二進制位表示一個16進制位  

進制轉換示意圖

JAVA學習第四課(數組)

二維數組:

定義一維數組:

int a[] = new int[5];  

是以定義二維數組 同一維數組

定義方式1:

int arr[][] = new int[3][2];//數組初始null,元素的初始值都是0  

這個二維數組,這個二維數組中有3個一維數組,每個一維數組有2個元素

定義方式2:

int arr[][] = new int[4][];  

arr[0] = new int[5];  

arr[1] = new int[3];  

arr[2] = new int[8];  

arr[2] = new int[1];  

這個二維數組,有4個一維數組,數組[0] 中有5個元素,數組[1] 中有3個元素.....

列印二維數組中的下标為1的一維數組的下标為1的元素:System.out.print(arr[1][1]);

System.out.print(arr);//[[I@15db9742:@左邊是數組的類型,右邊是實體在記憶體中存儲的哈希值  

int len = arr.length;一維數組的個數  

int len1 = arr[0].length;一維數組元素的個數  

int arr[][] = {{1,1},{1,2,3},{6,5,4,7,8,2}};  

for(int i = 0;i<arr.length;i++)  

    for(int j = 0;j<arr[i].length;j++)  

        System.out.print(arr[i][j]+" ");  

    System.out.println();  

二維數組的使用場景:

隻有一點,視情況而定,有明顯的層次感資料問題,比如銷售員不同月份的銷售額