1. 程式人生 > >Java基礎學習 二 (陣列、算術運算子表示式、運算子、流程控制和基本語句)

Java基礎學習 二 (陣列、算術運算子表示式、運算子、流程控制和基本語句)

陣列:只要建立大小就不能改變,用於儲存相同型別的元素的一個固定大小的連續集合。陣列是用於儲存資料的集合,但往往將陣列認為是相同型別的變數的集合  深層次理解參考

一:一維陣列  陣列也是物件 是引用型別

     地址中存放形式

    一)宣告和建立:

           方式一:型別[] 陣列名

           方式二:型別 陣列名[]

int a[] = new int[2];
int[] b = new int[3];
String[] s;
String st[];

    二)引用一維陣列元素:

            通過陣列的下標引用 (下標從0開始)

            如  上面建立的a  我要取出第一個元素a[0] 第二個 a[1] 因為就聲明瞭兩個元素的陣列 如果取到第三個就會報陣列下標越界異常

            迴圈列印

int[] a = new int[3];
a[0] = 1;a[1] = 2;a[2] = 3;
//a.length 讀取陣列的長度
for(int i = 0 ; i<a.length;i++){
    System.out.println(a[i]);
}

    三)初始化陣列:

            1. 靜態初始化

int[] a = {1,2,3,4};

            2.動態初始化

int[] a = new int[5];

         列印結果

          可以看到建立陣列後 系統做了動態初始化

            陣列是引用型別   下面的程式碼中 a存放的是{1,2,3,4,5}陣列的記憶體地址 也就是引用  把這個引用賦值給aa時  aa與a存放的時同一個陣列的記憶體地址 當aa修改時 a也發生改變

int[] a = {1,2,3,4,5};
int[] aa;
for(int i = 0 ; i<a.length;i++){
    System.out.println(a[i]);
}
aa = a;
aa[1] = 100;
System.out.println("修改後----");
for(int i = 0 ; i<a.length;i++){
    System.out.println(a[i]);
}

        列印結果

        

二:二維陣列

一)宣告和建立:

           方式一:型別[][] 陣列名

           方式二:型別 陣列名[][]

           方式三:型別[] 陣列名[]

//直接平分
int a[][] = new int[2][2];
int[][] b = new int[3][3];
String[][] s;
String[] st[];

//非平衡陣列
int aa[][];
aa = new int[3][];
aa[0] = new int[4];
aa[1] = new int[2];
aa[2] = new int[3];

int a[][] = new int[3][4]

   

二)引用 二維陣列元素:

            通過陣列的下標引用 (下標從0開始)

            如  上面建立的a  我要取出第一個元素a[0][0] 第二個 a[0][1] ....

    三)初始化陣列:

            1. 靜態初始化 並列印

int[][] a = {{1, 2, 3, 4}, {1,2,3}, {1,2,3,4,5,6}};
for(int i =0;i<a.length;i++){
    for(int j=0;j<a[i].length;j++){
        System.out.print(a[i][j]);
    }
    System.out.println();
}
}

            2.動態初始化

                建立後預設賦值

算術運算子表示式

       運算子按功能劃分

           賦值運算            =   +=   -=   *=   /=   (%)=   <<=   >>=   &=   ^=   |=

           算術運算            +   -   *   /   %   ++    --

           關係運算            ==    !=   >   <   >=    <=

           邏輯運算           &&    ||    !

操作符 描述 例子A=true B=false
&& 稱為邏輯與運算子。當且僅當兩個運算元都為真,條件才為真。 (A && B)為假。
| | 稱為邏輯或操作符。如果任何兩個運算元任何一個為真,條件為真。 (A | | B)為真。
稱為邏輯非運算子。用來反轉運算元的邏輯狀態。如果條件為true,則邏輯非運算子將得到false。 !(A && B)為真

           條件運算(?:)    也被稱為三元運算子

int a , b;
a = 10;
// 如果 a 等於 1 成立,則設定 b 為 20,否則為 30
b = (a == 1) ? 20 : 30;
System.out.println(b);
// 如果 a 等於 10 成立,則設定 b 為 20,否則為 30
b = (a == 10) ? 20 : 30;
System.out.println(b);

           位運算               &   |   ^   ~   <<   >>   >>>

      向左位移一位是乘以2 向左位移兩位是乘以4。 向右位移一位是除以2。 >>>邏輯右移 結果都為正數

操作符 描述 例子  A=0011 1100  B=0000 1101
如果相對應位都是1,則結果為1,否則為0 (A&B),得到12,即0000 1100
| 如果相對應位都是0,則結果為0,否則為1 (A | B)得到61,即 0011 1101
^ 如果相對應位值相同,則結果為0,否則為1 (A ^ B)得到49,即 0011 0001
按位取反運算子翻轉運算元的每一位,即0變成1,1變成0。 (〜A)得到-61,即1100 0011
<<  按位左移運算子。左運算元按位左移右運算元指定的位數。  A << 2得到240,即 1111 0000
>>  按位右移運算子。左運算元按位右移右運算元指定的位數。 A >> 2得到15即 1111
>>>  按位右移補零操作符。左運算元的值按右運算元指定的位數右移,移動得到的空位以零填充。 A>>>2得到15即0000 1111

       運算元數量劃分  一元運算子(++ -- +[正] -[負])    二元運算子(+  -  *  /  %  <  >  <=  >=  !=)    三元運算子( [數] ? [數] : )

instanceof 運算子        檢查該物件是否是一個特定型別(類型別或介面型別)

String name = "James";
boolean result = name instanceof String; // 由於 name 是 String 型別,所以返回真

優先順序關係:

類別

操作符 方向
字尾 () [] . (點操作符) 左到右
一元 + + - !〜 從右到左
乘性  * /% 左到右
加性  + - 左到右
移位  >> >>>  <<  左到右
關係  >> = << =  左到右
相等  ==  != 左到右
按位與 左到右
按位異或 ^ 左到右
按位或 | 左到右
邏輯與 && 左到右
邏輯或 | | 左到右
條件 ?: 從右到左
賦值 = + = - = * = / =%= >> = << =&= ^ = | = 從右到左
逗號 左到右

流程控制和基本語句

  簡單語句:以分號結尾

       表示式語句:以分號作為結束符的語句。空語句:只有一個分號的語句

        break語句:無標籤的break後面直接跟 ; 號  ,結束當前迴圈。帶標籤 break後面跟一個標籤,跳轉到此標籤標記位置執行

a:
    for (int i = 0;i<5;i++){
        System.out.println("執行第一層for語句i="+i);
        for (int j = 0;j<6;j++){
            System.out.println("跳出最外層的for迴圈");
            break a;
        }
    }
System.out.println("標籤跳出");

執行結果

        continue語句:不帶標籤的continue,結束本次迴圈執行下次迴圈。帶標籤的continue 跳到標籤處繼續執行迴圈

a:
    for (int i = 0;i<5;i++){
        System.out.println("執行第一層for語句i="+i);
        for (int j = 0;j<6;j++){
            System.out.println("跳出最外層的for迴圈");
            continue a;
        }
    }
System.out.println("標籤跳出");
}

執行結果 

        return語句  退出所在的方法 。 後面加返回型別資料 可將此資料返回到呼叫方法的地方

        package語句  在專案的src目錄下建立的檔案加叫做包 在包裡建立的類需要使用package加上所在的包名只能有一個

         

        import語句  在package包的下面 可以是多個 用於引入其他不在同一個包中的類  引入一個包的所有類import 包名.*

          

  複合語句:用大括號括起來的語句塊

         if語句

if(布林表示式)
{
   //如果布林表示式為true將執行的語句
}
//如果布林表示式為false將跳過

         if...else語句

if(布林表示式){
   //如果布林表示式的值為true
}else{
   //如果布林表示式的值為false
}

        if...else if...else 語句 

if(布林表示式 1){
   //如果布林表示式 1的值為true執行程式碼
}else if(布林表示式 2){
   //如果布林表示式 2的值為true執行程式碼
}else if(布林表示式 3){
   //如果布林表示式 3的值為true執行程式碼
}else {
   //如果以上布林表示式都不為true執行程式碼
}

        巢狀的 if…else 語句 

if(布林表示式 1){
   ////如果布林表示式 1的值為true執行程式碼
   if(布林表示式 2){
      ////如果布林表示式 2的值為true執行程式碼
   }
}

       switch語句

// 條件的值可以為  byte、short、int 或者 char  從 Java SE 7 開始,switch 支援字串 String 型別
// 條件只能是一個常量 
switch(條件){
    case value :
       //語句
       break; //可選
    case value :
       //語句
       break; //可選
    //你可以有任意數量的case語句
    default : //可選
       //語句
}

        switch與if - elsefi - else 可替換使用   效率有所不同 switch的判斷相對if 較快 但switch只能用於常量的判斷 

        如果case 語句塊中沒有break 會把匹配成功後面的case語句塊也執行 直到遇到break

  迴圈語句

        while 迴圈 

//為true時迴圈
while( 布林表示式 ) {
  //迴圈內容
}

       do…while 迴圈 

do {
       //程式碼語句
}while(布林表示式);

//先執行語句在判斷是否繼續迴圈

       for迴圈 

//如果不需要初始化可以不寫 直接寫一個空語句 也就是直接寫分號
for(初始化; 布林表示式; 迭代語句) {
    //程式碼語句
}

/*
執行順序
初始化 -> 布林表示式判斷是否為true -> 執行程式碼語句 -> 迭代語句 -> 布林表示式判斷是否為true -> 執行程式碼語句 -> 迭代語句 - >>>>>  直到布林表示式判斷是否為false
*/

       foreach迴圈  Java5 引入了一種主要用於陣列的增強型 for 迴圈

for(宣告語句 : 表示式)
{
   //程式碼句子
}

//執行過程 表示式的值 -> 賦值給宣告語句的對應型別的變數 ->程式碼語句 依次迴圈直到表示式中元素完全取出