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(宣告語句 : 表示式)
{
//程式碼句子
}
//執行過程 表示式的值 -> 賦值給宣告語句的對應型別的變數 ->程式碼語句 依次迴圈直到表示式中元素完全取出