畢向東Java基礎(chǔ)教程-Java基礎(chǔ)語法【下】

本篇為Java基礎(chǔ)語法【下】,包含程序流程控制、函數(shù)、數(shù)組這三部分內(nèi)容饼丘。


程序流程控制

順序結(jié)構(gòu)

判斷結(jié)構(gòu)

三種格式:

/*=======第一種格式=======*/
if(條件表達式)
{
    執(zhí)行語句;
}

/*=======第二種格式=======*/
if(條件表達式)
{
    執(zhí)行語句;
}
else
{
    執(zhí)行語句;
}

/*=======第三種格式=======*/
if(條件表達式)
{
    執(zhí)行語句;
}
else if(條件表達式)
{
    執(zhí)行語句;
}
...
else
{
    執(zhí)行語句;
}

注意:

  • if語句后若未寫大括號,那就只能控制離它最近的單條語句辽话。

  • if else與三元運算符的區(qū)別在于:三元運算符由于是運算符肄鸽,因此必須有結(jié)果。

  • Java語言中語句一般有兩種結(jié)束方式:以分號;或后大括號}結(jié)束油啤,以}結(jié)束的一般為流程控制語句典徘。

  • Example1:if語句無控制體的情況

    if(false);
    {
        System.out.println("Hello World!");  //會打印Hello World!,實際上if沒有控制體益咬,大括號內(nèi)容叫做局部代碼塊
    }
    

    Example2:局部代碼塊

    {
       int m = 89;
       System.out.println("Hello World!..."+m);
    }
    System.out.println("Over..."+m);        //編譯報錯
    

    局部代碼塊一執(zhí)行完逮诲,m變量在內(nèi)存中就會被釋放,因此局部代碼塊可以定義局部變量的生命周期幽告。為了節(jié)約內(nèi)存空間梅鹦,在確保后面不會在使用此變量的情況下,可以使用局部代碼塊的形式冗锁,執(zhí)行完后齐唆,其空間就會被騰出來(虛擬機在內(nèi)存當中開辟的空間是有限的,除非在啟動虛擬機的時候設(shè)置需要的空間)冻河。

選擇結(jié)構(gòu)

格式:

switch(表達式)
{
    case 取值1:
        執(zhí)行語句;
        break;
    case 取值2:
        執(zhí)行語句;
        break; 
    ...
    default:
        執(zhí)行語句;
        break;
}

特點:

  • switch能判斷的數(shù)據(jù)類型有限箍邮,只有四種:byte, short, int, char(Java1.5 為switch增加了枚舉類型,Java1.7 增加了字符串類型)叨叙。

  • 程序一執(zhí)行到switch锭弊,會把大括號內(nèi)所有的語句加載到內(nèi)存中。

  • switch中條件放置無順序摔敛,但執(zhí)行有順序。
    Example1:即使default放在第一位全封,也會先判斷case

    switch(表達式)
    {
        default:
            執(zhí)行語句;
            break;
      case 取值1:
            執(zhí)行語句;
            break;
        case 取值2:
            執(zhí)行語句;
            break; 
        ...
    }
    
  • 程序遇到滿足條件的值后马昙,如果沒有break,則會繼續(xù)向下執(zhí)行刹悴,之后的case不再進行判斷行楞,直接執(zhí)行里面的語句,直到遇到break或執(zhí)行到大括號終結(jié)土匀。
    Example2

    int x = 2;
    swtich(x)
    {
        default:
          System.out.println("d");
          //break;
        case 4:
          System.out.println("a");
          //break; 
        case 1:
          System.out.println("b");
          break;
        case 3:
          System.out.println("c");
          break;
    }
    //輸出結(jié)果為d, a, b
    
  • Example3:多個值子房,對應(yīng)相同執(zhí)行語句

    int month = 3;
    switch(month)
    {
        case 3:
        case 4:
            System.out.println(month+"月對應(yīng)的是春季");
            break;
    }
    

    執(zhí)行到case 3,滿足條件,但沒有執(zhí)行語句和break证杭,繼續(xù)往下執(zhí)行并且不判斷田度,執(zhí)行完case 4中的語句再break

ifswtich的應(yīng)用:

  • if
    1. 對具體的值進行判斷
    2. 對值的區(qū)間進行判斷
    3. 對運算結(jié)果是boolean類型的表達式進行判斷
  • switch
    1. 對具體的值進行判斷
    2. 值的個數(shù)通常是固定的

對于幾個固定的值判斷解愤,建議使用switch語句镇饺,因為其會將具體的答案都加載進內(nèi)存,效率相對高一點送讲。
常用的為if奸笤,不建議用switch語句,因為其功能性較差哼鬓,且書寫麻煩监右。

循環(huán)結(jié)構(gòu)

三種格式:

/*=======while語句格式=======*/
while(條件表達式)
{
    執(zhí)行語句;
}

/*=======do while語句格式=======*/
do
{
    執(zhí)行語句;
}while(條件表達式);

/*=======for語句格式=======*/
for(初始化表達式;循環(huán)條件表達式;循環(huán)后的操作表達式)
{
    執(zhí)行語句;(循環(huán)體)
}

特點:

  • do while:無論條件是否滿足,循環(huán)體至少執(zhí)行一次异希。

  • for的三個表達式運行順序:初始化表達式只執(zhí)行一次健盒;判斷循環(huán)條件,為真就執(zhí)行循環(huán)體宠互,再執(zhí)行循環(huán)后的操作表達式味榛,接著繼續(xù)判斷循環(huán)條件,重復(fù)整個過程予跌,直到條件不滿足為止搏色。

  • whilefor可以互換,區(qū)別在于for為了循環(huán)而定義的變量在for循環(huán)結(jié)束就在內(nèi)存中釋放券册,而while循環(huán)使用的變量在循環(huán)結(jié)束后還可以繼續(xù)使用频轿。

  • 最簡單無限循環(huán)格式:while(true)for(;;)烁焙,無限循環(huán)存在的原因是并不知道循環(huán)多少次航邢,而是根據(jù)某些條件,來控制循環(huán)(for兩邊的表達式可以不寫骄蝇,中間不寫會默認為true)膳殷。

  • Example1:while語句錯誤寫法

    while(條件表達式);  //while語句后加分號,會一直循環(huán)
    {
        執(zhí)行語句;
    }
    
  • Example2: for第一和第三個表達式的非常規(guī)寫法

    int x = 1;
    for(System.out.println("a");x<3;System.out.println("c"))
    {
        System.out.println("d");
        x++;
    }
    //輸出 a d c d c
    //注意能執(zhí)行成功九火,只要滿足表達式的條件即可
    

應(yīng)用:
Example3: 打印九九乘法表

for(int x = 1; x <= 9; x++)
{
    for(int y = 1; y <= x; y++)
    {
        System.out.print(y + "*" + x + "=" + y * x + "\t"); // "\t":制表符赚窃,可以用來對齊
    }
    System.out.println();
}

輸出結(jié)果為

常用轉(zhuǎn)義符:

  • n:回車

  • t:制表符

  • b:退格

  • r:按下回車鍵
    windows系統(tǒng)中回車符其實是由rn這兩個符號組成的,linux中回車符是n岔激,dos可以識別nrn勒极,但是windows的一些軟件中只能識別rn
    Example4:打印帶雙引號的hello world

    System.out.println(""hello world"");//錯誤寫法虑鼎,會識別成前兩個雙引號為一對
    System.out.println("\"hello world\"");//正確寫法
    

    Example5:打印帶反斜杠的hello world

    System.out.println("\\hello world");
    

其他流程控制語句

break(跳出):應(yīng)用于選擇結(jié)構(gòu)(swtich)和循環(huán)結(jié)構(gòu)(loop)
contine(繼續(xù)):應(yīng)用于循環(huán)結(jié)構(gòu)(loop)

注意:

  • 這兩個語句離開應(yīng)用范圍就無意義辱匿。

  • 這兩個語句單獨存在下面都不可以有語句键痛,因為執(zhí)行不到。

  • 如果出現(xiàn)了循環(huán)嵌套匾七,break要跳出指定循環(huán)絮短,可以通過標號實現(xiàn)——標號的出現(xiàn),可以讓這兩個語句作用于指定的范圍(標號用得并不多)乐尊。
    Example

    xiaoqiang:for(int x=0; x<3; x++)
    {
        wangcai:for(int y=0; y<4; y++)
        {
            System.our.println("x=" + x);
            break xiaoqiang;
        }
    }
    xiaoqiang:for(int x=0; x<3; x++)
    {
        wangcai:for(int y=0; y<4; y++)
        {
            System.our.println("x=" + x);
            continue xiaoqiang;
        }
    }
    

函數(shù)

函數(shù)的定義

什么是函數(shù)戚丸?

  • 函數(shù)就是定義在類中的具有特定功能的一段獨立小程序
  • 函數(shù)也稱為方法

函數(shù)的格式:

修飾符 返回值類型 函數(shù)名(參數(shù)類型 形式參數(shù)1, 參數(shù)類型 形式參數(shù)2, ...)
{
    執(zhí)行語句;
    return 返回值;
}

Example

class FunctionDemo
{
    public static void main(String[] args)
    {
        int c = add(3,4);
        System.out.println("c="+c);
    }
    int add(int a, int b)
    {
        return a+b;
    }
}

編譯報錯:無法從靜態(tài)上下文中引用非靜態(tài)方法add(int, int),需要在add()函數(shù)前加static修飾符(注意是在編譯過程中失斎忧丁)限府。

函數(shù)的特點

  • 定義函數(shù)可以將功能代碼進行封裝
  • 便于對該功能進行復(fù)用,函數(shù)的出現(xiàn)提高了代碼的復(fù)用性
  • 函數(shù)只有被調(diào)用才會被執(zhí)行
  • 對于函數(shù)沒有具體返回值的情況痢缎,返回值類型用關(guān)鍵字void表示胁勺,那么該函數(shù)中的return語句如果在最后一行可以省略不寫

注意:

  • 函數(shù)中只能調(diào)用函數(shù),不可以在函數(shù)內(nèi)部定義函數(shù)独旷。
  • 定義函數(shù)時署穗,函數(shù)的結(jié)果應(yīng)該返回給調(diào)用者,交由調(diào)用者處理嵌洼。
    Example
class Demo 
{
    public static void main(String[] args) 
    {
        System.out.println(add(3,5));
    }
    public static void add(int a, int b)
    {
        System.out.println(a + b);
        return;
    }
}

編譯出錯: System.out.println(add(3,5));此處不允許使用void類型案疲。

函數(shù)的應(yīng)用

Example:判斷成績所屬的等級

public static char getLevel1(int num)
{
    char level;
    if(num>=90 && num<=100) level = 'A';
    else if(num>=80 && num<=89) level = 'B';
    else if(num>=70 && num<=79) level = 'C';
    else if(num>=60 && num<=69) level = 'D';
    else if(num<60) level = 'E';
    return level;
}

public static char getLevel2(int num)
{
    char level;
    if(num>=90 && num<=100) level = 'A';
    else if(num>=80 && num<=89) level = 'B';
    else if(num>=70 && num<=79) level = 'C';
    else if(num>=60 && num<=69) level = 'D';
    else if(num<60 || num>100) level = 'E';
    return level;
}

兩個函數(shù)均編譯錯誤 :可能尚未初始化變量level;編譯時不會判斷數(shù)值(即使涵蓋了所有的情況)麻养,只管語法錯誤褐啡,所以最后應(yīng)加else語句。

函數(shù)的重載(overload)

重載的概念:在同一類中鳖昌,允許存在一個以上的同名函數(shù)备畦,只要它們的參數(shù)個數(shù)或者參數(shù)類型不同即可。
重載的特點:與返回值類型無關(guān)许昨,只看參數(shù)列表懂盐。
重載的好處:方便于閱讀,優(yōu)化了程序設(shè)計(函數(shù)的功能一樣糕档,僅僅是參與運算的未知內(nèi)容不同時莉恼,可以定義多函數(shù),卻使用統(tǒng)一函數(shù)名稱速那,這樣方便閱讀俐银,在調(diào)用時,虛擬機通過參數(shù)列表的不同來區(qū)分同名函數(shù))琅坡。

Example1

public static int add(int a, int b)
{
    return a+b;
}
public static double add(int a, int b)
{
    return a+b;
}

編譯報錯:已在XX中定義add(int, int)…悉患,Java是嚴謹性語言残家,如果函數(shù)出現(xiàn)調(diào)用的不確定性榆俺,會編譯失敗。

Example2:打印乘法表

/**
打印指定參數(shù)的任意乘法表
*/
public static void printCFB(int num)
{
    for(int x=1; x<=num; x++)
    {
        for(int y=1; y<=x; y++)
        {
            System.our.print(y+"*"+x+"="+y*x+"t");
        }
        System.out.println();
    }
}
/**
打印標準乘法表(不指定參數(shù)的情況下)
*/
public static void printCFB()
{
    for(int x=1; x<=9; x++)
    {
        for(int y=1; y<=x; y++)
        {
            System.our.print(y+"*"+x+"="+y*x+"t");
        }
        System.out.println();
    }
}

如上,一般只要一重載茴晋,代碼就會重復(fù)陪捷;可以通過調(diào)用的方式,減少重復(fù)代碼诺擅。


/**
打印指定參數(shù)的任意乘法表
*/
public static void printCFB(int num)
{
    for(int x=1; x<=num; x++)
    {
        for(int y=1; y<=x; y++)
        {
            System.our.print(y+"*"+x+"="+y*x+"t");
        }
        System.out.println();
    }
}
/**
打印標準乘法表市袖。
*/
public static void printCFB()
{
    printCFB(9);
}

一般由于參數(shù)個數(shù)的原因重載,都能復(fù)用烁涌;而如果是參數(shù)類型苍碟,則不行。

函數(shù)調(diào)用

棧的形式

數(shù)組

數(shù)組的定義

概念:同一類型數(shù)據(jù)的集合撮执,其實數(shù)組就是一個容器微峰。

好處:可以自動給數(shù)組中的元素從0開始編號,方便操作這些元素抒钱。

格式:

/*=======第一種格式=======*/
元素類型[] 數(shù)組名 = new 元素類型[元素個數(shù)或數(shù)組長度];
/*=========示例========*/
int[] arr = new int[5];

/*=======第二種格式=======*/
元素類型[] 數(shù)組名 = new 元素類型[]{元素1, 元素2, ...};
/*=========示例========*/
int[] arr = new int[]{3,5,1,7};   //用new蜓肆,常規(guī)初始化方式
int[] arr = {3,5,1,7};            //靜態(tài)初始化方式
//以上兩種方式在大部分情況下都是通用的,但它們在重新賦值或傳參時會有一點小差別

Example

int[] arr = new int[3];
System.out.println(arr[0]);
System.out.println(arr[1]);
//均輸出0(默認賦值為0)

數(shù)組的內(nèi)存分配及特點

Java內(nèi)存分為五片:

  • 寄存器(CPU使用)
  • 本地方法區(qū)(調(diào)用系統(tǒng)底層內(nèi)容)
  • 方法區(qū)(別名【數(shù)據(jù)區(qū)谋币、共享區(qū)仗扬、share data】,存儲方法)
  • 棧內(nèi)存(基本數(shù)據(jù)類型):存儲的都是局部變量蕾额,變量所屬的作用域一旦結(jié)束早芭,該變量就會自動釋放。
  • 堆內(nèi)存(引用數(shù)據(jù)類 ):存儲數(shù)組和對象(其實數(shù)組也是對象)凡简,凡是new建立的對象都在堆中逼友。

堆的特點:

  • 每一個實體都有首地址值。
  • 堆內(nèi)存中的每一個變量都有默認初始化值秤涩,根據(jù)類型的不同而不一樣帜乞,整數(shù):0,小數(shù):0.0或者0.0f筐眷,boolean:false黎烈,char :‘u0000’,實體:null匀谣。
  • 垃圾回收機制:當堆中的實體沒有被任何變量指向時照棋,不像棧一樣,會立刻被釋放武翎,而是會被視作垃圾烈炭,被自動回收,垃圾回收機制會不定時的宝恶,自動檢測堆里的垃圾符隙,進行回收趴捅。C++需要程序員手動回收堆里的垃圾,析構(gòu)函數(shù)霹疫。

Example1

int[] arr = new int[3];
//arr在棧中拱绑,new int[3]在堆中,堆中存的是實體丽蝎,實體的用途:用于封裝數(shù)據(jù)猎拨,存儲很多數(shù)據(jù)

Example2

sytem.out.print(arr[0]);//先找arr,再根據(jù)地址找數(shù)組屠阻,找到數(shù)組后找對應(yīng)的元素
arr = null;             //讓arr不指向任何實體對象 

數(shù)組操作常見問題

Example1:ArrayIndexOutOfBoundsException異常

int[] arr = new int[3];
System.out.println(arr[3]);

編譯完红省,不會出錯,因為編譯時不會在內(nèi)存中建立數(shù)組国觉,因此也不會找角標
運行時类腮,產(chǎn)生問題,當訪問到數(shù)組中不存在的角標/索引時蛉加,就會產(chǎn)生ArrayIndexOutOfBoundsException異常蚜枢。

Example2:NullPointerException異常

int[] arr = new int[3];
arr = null;
System.out.println(arr[0]);

運行出錯,當引用型變量沒有任何實體指向時针饥,還在用其操作實體厂抽,就會產(chǎn)生NullPointerException異常。

Example3

int[] arr = new int[3];
System.out.println(arr);  //[I@c17164

@右邊:哈希值丁眼,哈希本身是一種算法筷凤,由這個算法來定義數(shù)組實體在內(nèi)存中存儲的位置藐守,可以簡單理解為是一個地址值,windows支持的卢厂,Java調(diào)用惠啄。
@左邊:代表實體的類型, [:數(shù)組型撵渡, I:int型。
測試的時候用趋距,當我們不知道這個變量接收的數(shù)據(jù)是什么類型時粒氧,可以打印出來看看。

數(shù)組常見操作

Example1:獲取最值(最大值节腐,最小值)

class Demo
{
    public static void main(String[] args)
    {
        int[] arr = {-34,-19,-11,-109,-3,-56};
        int max = getMax(arr);
        System.out.println("max="+max);
    }
    public static int getMax(int[] arr)
    {
        int max = arr[0];
        for(int x=1; x<arr.length; x++)
        {
            if(arr[x]>max) max = arr[x];
        }
        return max;
    }
}

注意max初始化的問題外盯,若初始化為0廊敌,則判斷不出最大值。

Example2-1:選擇排序门怪,特定位置和其他位置比較

public static void selectSort(int[] arr)
{
    for(int i = 0; i < arr.length-1; i++)
    {
        for(int j = i+1; j < arr.length; j++)
        {
            if(arr[i]>arr[j])
            {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}
//性能問題
//在selectSort中,每次把最小的元素放到固定位置的過程中锅纺,會進行大量元素的交換掷空,實際上只要找到值最小的元素,再與固定位置交換即可
public static void selectSort_2(int[] arr)
{
    for(int x=0; x<arr.length-1; x++)
    {
        int num = arr[x];
        int idex = x;
        for(int y=x+1; y<arr.length; y++)
        {
            if(num>arr[y])
            {
                num = arr[y];
                index = y;
            }
        }
        if(index!=x)
        {
            int temp = arr[x];
            arr[x] = arr[index];
            arr[index] = temp;
        }      
    }
}

Example2-2:冒泡排序囤锉,相鄰元素比較

public static void bubbleSort(int[] arr)
{
    for(int x=0; x<arr.length-1; x++)//每次循環(huán)將此次比較的元素中最大的元素移到此次序列的最后
    {
        for(int y=0; y<arr.length-1-x; y++)//-1避免角標越界坦弟,-x外循環(huán)增加一次,比較的元素個數(shù)遞減
        {
            if(arr[y]>arr[y+1])
            {
                int temp = arr[y];
                arr[y] = arr[y+1];
                arr[y+1] = temp;
            }
        }
    }
}
//數(shù)組中元素的交換可以提取出來官地,寫作函數(shù)
public static void swap(int[] arr,int a,int b)
{
    int temp = arr[a];
    arr[a] = arr[b];
    arr[b] = temp;
}
public static void bubbleSort_2(int[] arr)
{
    for(int x=0; x<arr.length-1; x++)
    {
        for(int y=0; y<arr.length-1-x; y++)
        {
            if(arr[y]>arr[y+1])
                swap(arr,y,y+1);
        }
    }
}
//其中的for循環(huán)也可以寫成以下形式
for(int x=arr.length-1; x>0; x--)
{
    for(int y=0; y<x; y++)
    {
        ...
    }
}

注意:
1酿傍、可以通過調(diào)用Arrays.sort(arr);實現(xiàn)排序功能
2、操作的是同一空間

Example3:折半查找(二分查找)

public static int func(int[] arr, int value)
{
    int min, max, mid;
    min = 0;
    max = arr.length;
    mid = (min+max)/2;
    while(min <= max)
    {
        mid = (min+max)/2;//mid = (a+b)>>2;
        if(arr[mid] < value)
            min = mid+1;
        else if(arr[mid] > value)
            max = mid-1;
        else
            return mid;
    }
    return -1;
}

注意:

  1. 給定一個有序數(shù)組驱入,若往該數(shù)組中存儲一個元素赤炒,并保證數(shù)組仍然是有序的,那么這個元素存儲的角標如何獲取-->return min亏较。

  2. int[] arr = {13,15,19,27,33,45,78,106};
    Arrays.binarySearch(arr,45);
    //若元素存在莺褒,返回元素所在的位置;
    //若元素不存在雪情,返回的是-插入點-1遵岩;之所以-1,是因為避免返回0巡通,例如Arrays.binarySearch(arr,5)
    

Example4:進制轉(zhuǎn)換:利用與運算實現(xiàn)

public static void main(String[] args)
{
    toHex(60);
}
//0,1,2,3,4,5,6,7,8,9,A, B, C, D, E, F
//0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
public static void toHex(int num)
{
    for(int x = 0; x < 8; x++)
    {
        int temp = num & 15;
        if(temp > 9)
            System.out.print((char)(temp-10+'A'));
        else
            System.out.print(temp);
        num = num >>> 4;
    }
}
/*
什么時候使用數(shù)組呢宴凉?
如果數(shù)據(jù)出現(xiàn)了對應(yīng)關(guān)系弥锄,而且對應(yīng)關(guān)系的一方是有序的數(shù)字編號叉讥,可作為角標使用。

將這些數(shù)據(jù)存儲到數(shù)組中罐盔,根據(jù)運算的結(jié)果作為角標直接去查數(shù)組中對應(yīng)的元素即可惶看。
這種方式:稱為查表法。
(存在對應(yīng)關(guān)系幅骄,但無序,可以使用map)
*/
public static void toHex_2(int num)
{
    if(num == 0)
    {
        System.out.print("0");
        return;
    }
    char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    char[] arr = new char[8];
    int pos = arr.length;
    while(num != 0)
    {
        int temp = num & 15;
        arr[--pos] = chs[temp];
        num = num >>> 4;
    }
    for(int x = pos; x < arr.length; x++)
    {
        System.out.print(arr[x]);
    }
}
/*十進制轉(zhuǎn)二進制/八進制類似
可以通過函數(shù)調(diào)用的方式本今,將通用的代碼抽出來
*/
//十進制-->十六進制
public static void toHex(int num)
{
    trans(num,15,4);
}
//十進制-->二進制
public static void toBinary(int num)
{
    trans(num,1,1);
}
//十進制-->八進制
public static void toOctal(int num)
{
    trans(num,7,3);
}
public static void trans(int num, int base, int offset)
{
    if(num == 0)
    {
        System.out.print("0");
        return;
    }
    char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    char[] arr = new char[32];
    int pos = arr.length;
    while(num != 0)
    {
        int temp = num & base;
        arr[--pos] = chs[temp];
        num = num >>> offset;
    }
    for(int x = pos; x < arr.length; x++)
    {
        System.out.print(arr[x]);
    }
}

注意:可以通過Integer類的方法直接將十進制數(shù)轉(zhuǎn)換為對應(yīng)的進制數(shù)

System.out.println(Integer.toBinaryString(-6));
System.out.println(Integer.toHexString(5));
System.out.println(Integer.toOctalString(32));

二維數(shù)組

格式:

格式1:int[][] arr = new int[3][2];

  • 定義了名稱為arr的二維數(shù)組
  • 二維數(shù)組中有3個一維數(shù)組
  • 每一個一維數(shù)組中有2個元素
  • 一維數(shù)組的名稱為arr[0]拆座,arr[1]arr[2]
  • 給第一個一維數(shù)組1角標位賦值為78寫法:arr[0][1] = 78;

格式2:int[][] arr = new int[3][];

  • 二維數(shù)組中有3個一維數(shù)組

  • 每個一維數(shù)組都是默認初始化值null

  • 可以對這三個一維數(shù)組分別進行初始化

    arr[0] = new int[3];
    arr[1] = new int[1];
    arr[2] = new int[2];
    

格式3:

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

還可以寫成如下方式:

int[][] arr = new int[3][2];
int[] arr[] = new int[3][2];
int arr[][] = new int[3][2];

內(nèi)存圖示:

Example1:直接打印二維數(shù)組

int[][] arr1 = new int[3][2];
System.out.println(arr);       //[[I@c17164
System.out.println(arr[0]);    //[I@1fb8ee3
System.out.println(arr[0][0]); //0

int[][] arr2 = new int[3][];
System.out.println(arr);       //[[I@c17164
System.out.println(arr[0]);    //null
System.out.println(arr[0][0]); //NullPointerException

Example2:數(shù)組長度

System.out.println(arr.length);    //打印二維數(shù)組的長度-->就是一維數(shù)組的個數(shù)冠息。
System.out.println(arr[1].length); //打印二維數(shù)組中角標為1的一維數(shù)組的長度挪凑。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市躏碳,隨后出現(xiàn)的幾起案子菇绵,更是在濱河造成了極大的恐慌镇眷,老刑警劉巖偏灿,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翁垂,死亡現(xiàn)場離奇詭異,居然都是意外死亡枚荣,警方通過查閱死者的電腦和手機橄妆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門害碾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慌随,“玉大人,你說我怎么就攤上這事丸逸』聘眨” “怎么了民效?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵研铆,是天一觀的道長棵红。 經(jīng)常有香客問我逆甜,道長交煞,這世上最難降的妖魔是什么斟或? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任萝挤,我火速辦了婚禮怜珍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘今豆。我一直安慰自己呆躲,他們只是感情好捶索,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驯鳖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谢揪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天凳鬓,我揣著相機與錄音缩举,去河邊找鬼仅孩。 笑死辽慕,一個胖子當著我的面吹牛赦肃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播温艇,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼勺爱,長吁一口氣:“原來是場噩夢啊……” “哼琐鲁!你這毒婦竟也來了围段?” 一聲冷哼從身側(cè)響起投放,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拜姿,沒想到半個月后蕊肥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛤肌,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡裸准,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年盐肃,在試婚紗的時候發(fā)現(xiàn)自己被綠了向胡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惊完。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拇派,靈堂內(nèi)的尸體忽然破棺而出凿跳,到底是詐尸還是另有隱情,我是刑警寧澤茧彤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布曾掂,位于F島的核電站珠洗,受9級特大地震影響若专,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜自阱,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一动壤、第九天 我趴在偏房一處隱蔽的房頂上張望淮逻。 院中可真熱鬧爬早,春花似錦、人聲如沸醉旦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至主卫,卻和暖如春鹃愤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瘩将。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工姿现, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留建钥,地道東北人虐沥。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像镐依,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子然低,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Java經(jīng)典問題算法大全 /*【程序1】 題目:古典問題:有一對兔子雳攘,從出生后第3個月起每個月都生一對兔子吨灭,小兔子...
    趙宇_阿特奇閱讀 1,844評論 0 2
  • 第四天 數(shù)組【悟空教程】 第04天 Java基礎(chǔ) 第1章數(shù)組 1.1數(shù)組概念 軟件的基本功能是處理數(shù)據(jù)喧兄,而在處理數(shù)...
    Java幫幫閱讀 1,585評論 0 9
  • DAY 05 1吠冤、 public classArrayDemo { public static void mai...
    周書達閱讀 651評論 0 0
  • Win7下如何打開DOS控制臺拯辙? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,588評論 4 12
  • 今天樊登讀書企業(yè)版——一書一課做活動買一年送一年薄风,作為小小書童的我一直忙個不停拍嵌,說句實在話循诉,真的不下于雙十一,雙十...
    諸葛學(xué)堂大語文閱讀 140評論 0 0