1. 程式人生 > >特殊字元及分支語句和迴圈語句

特殊字元及分支語句和迴圈語句

特殊的控制字元: \表示轉義
如:回車、換行、空格,Tab等等  
char c='\n';//換行
       '\r';//回車
       '\t';//Tab
       '\\';// \
       '\'';//'
       '\"';//"
       '\u4e2d';//表示Unicode中十六進位制的數


資料型別的轉換:
自動型別轉換(小到大)
強制型別轉換(大到小)


1.Java編譯器在編譯期間會將所有的字面量運算優化為結果:如'A'+1優化為整數
2.變數的值只能在執行期確定,不能在編譯期優化
3.int字面量在不超過char、byte、short的範圍時,可以直接給這三種類型的變數賦值


運算子:
數學運算子:+、-、*、/、%、++、--
1、同種型別的資料參與運算,返回同種型別的結果
2、如果型別不同,要型別轉換
3、byte、short、char按照int、型別計算
4、運算的時候Java不檢查溢位問題
5、整數的除法是整除
++ --自增自減運算(單位是1)
++/--在後就是先賦值後運算
++/--在前,就是先運算後賦值


比較運算子:>、<、>=、<=、==、!=


邏輯運算子:&(與)、|(或)、!(非)
短路邏輯和非短路邏輯
短路邏輯:&&、||、!
非短路邏輯:&、|、!


短路邏輯:&&、||
短路與運算:(如果表示式1)&&(表示式2),如果表示式1的值為false,那麼不計算表示式2,整個表示式返回false。
短路或運算:(如果表示式1)||(表示式2),一旦表示式1的值為true,那麼不計算表示式2,整個表示式返回true。


非短路邏輯:&、|
與運算:如果(表示式1)&(表示式2),不管表示式1的值是什麼,表示式2都要執行
或運算:如果(表示式1)|(表示式2),不管表示式1的值是什麼,表示式2都要執行


因為短路邏輯與實際業務更相近,所以實際業務中更常用


條件運算子:也稱為三目運算(三元運算)
語法:布林表示式1?表示式2:表示式3
如果布林表示式1返回的值為true,則以表示式2的整體作為結果,否則以表示式3的整體作為結果


賦值運算:=
賦值運算的表示式的值就是賦值的結果
int a=4;
System.out.println(a=8);//8


複合賦值運算的符:+=、-=、*=、/=、%=


字串連線運算:+
“+”是java中唯一的過載運算子。
過載:名字相同,功能不同的運算。
1、如果“+”兩端是數值,就是數學加法
2、如果“+”兩端有一端是字串,就是字串連線運算


分支結構:
1.if else
if(條件語句1){
執行語句1
}else if(條件語句2){
          執行語句2
}else{
其他執行語句
}

switch case

swtich case
語法:
switch(整數表示式){
case 整數字面量/常量1:  //語句塊1;break;
case 整數字面量/常量2:  //語句塊2;break;
case 整數字面量/常量3:  //語句塊3;break;
case 整數字面量/常量4:  //語句塊4;break;
default: //其他情況下的語句塊; break;
}


switch:開關
case:各種情況下執行的內容
break:跳出分支結構,不再執行下面的語句
1、switch(整數表示式),只能使用int short byte char,在JDK1.7以後還支援String型別。
2、case條件只能是具體的值,不能使用變數和表示式
3、case的條件內容可以為空,如果為空,就繼續執行之後的程式碼
4、default表示如果沒有滿足case條件的其他任何情況
5、break一定要寫,不寫會執行下面的程式碼,不寫會執行下面的程式碼,直到break為止
6、if esle 與 switch case 區別:
if else屬於多路分支,可以使用任意條件,包括整數條件
switch case只能更具資料結果進行分支,效能較好




迴圈控制語句
for 迴圈
for迴圈結構:"經典用法"處理與個數,次數有關的迴圈
語法:
for(初始化表示式1;迴圈條件2;遞增表示式4){
//迴圈體3
}
執行流程:1-》2-》true-》3-》4-》2-》true-》3-》4-》2-》false-》結束
while 迴圈
while迴圈結構:"經典用法"處理與個數,次數無關的迴圈
在迴圈開始的時候檢查迴圈條件
語法
while(迴圈條件1){
//迴圈體2
}
執行流程:
1-》true-》2-》1-》true-2-》1-》false-》結束
do while 迴圈
do while 迴圈結構:"經典用法"處理與個數,次數無關的迴圈。
在迴圈體以後檢查迴圈條件。
do{
//迴圈體1
}while(迴圈條件2);

執行流程:1-》2-》true-》1-》2-》true-》1-》2-》false-》結束

迴圈的互相代替
1.for迴圈替代while迴圈
while(迴圈條件){迴圈體}
等價於for(;迴圈條件;){迴圈體}


2.while迴圈替代for迴圈
for(初始化表示式;迴圈條件;遞增表示式){迴圈體}
等價於
初始化表示式;
while(迴圈條件){
迴圈體
遞增表示式;
}
3.死迴圈
while(true){迴圈體}
for(;true;){迴圈體}
for(;;){迴圈體}
4.while迴圈替代dowhile迴圈
do{迴圈體}(迴圈條件);
等價於
while(true){
迴圈體;
if(!迴圈條件){
break;
}
}


for(;;){
迴圈體;
if(!迴圈條件){
break;
}
}


for(;true;){
迴圈體;
if(!迴圈條件){
break;
}
}


雙層for迴圈
for(初始化表示式;迴圈條件;遞增表示式){
for(初始化表示式;迴圈條件;遞增表示式){
迴圈體
}
}


1.如果與次數或者個數有關的迴圈使用for
2.業務條件中迴圈條件在迴圈開始的時候檢查,使用while
3.業務條件中迴圈條件在迴圈之後檢查,使用 do while
4.業務條件中迴圈條件在迴圈體中部檢查,使用 死迴圈配合break
5.如果不確定使用哪種迴圈,就使用死迴圈+break


字元(char):單個字元,本質上是一個整數,使用單引號定義
字串(String):一排字元,本質上是字元陣列。使用雙引號定義
"中"=='中'//編譯錯誤
Java是強型別語言,型別不相容,不能進行比較
字串的比較,必須使用.equals()方法。
"中".equals('中');//返回false,型別不一致
"中".equals('中'+"");//返回true


==比較的是地址值
equals()比較的是內容


陣列:
java陣列就使"物件"
"物件"在java中就是存在的一個東西,唯物主義
object == 物件 == 東西  == 一切皆物件(一切存在的事物都是object)


java陣列:"物件",陣列就是一個東西(資料的組合)
這個東西包含多個型別一致的元素(按照特定)
陣列:一系列型別相同的元素按特定順序排列的組合。
如:鍵盤、玉米棒,共享單車(按順序排放)


1.陣列變數,是陣列的代名詞
如何宣告陣列變數,如何初始化變數,如何改變變數的值
語法:
資料型別[] 變數名;
如:int[] ary;聲明瞭一個int型別的陣列變數ary
   int a;聲明瞭一個int型別的變數a
//注意int型別和int陣列型別不是同種型別


陣列的變數可以引用陣列的物件
陣列變數是引用型別變數,值是地址值!是陣列的記憶體位置。
陣列變數可以賦值為null(空),表示不引用任何物件
null是一個字面量,表示沒有!
如:"小蘋果"  沒有引用任何東西。
當變數是null時,如果訪問屬性、方法、元素時,會發生異常:空指標異常!不是編譯錯誤!
當一個引用變數的值為null時,有變數,但是變數不引用任何東西,變數的值是"空",變數有值,是null


引用物件的值是物件的地址值,可以通過地址間接地引用物件


2.陣列物件(陣列)
建立陣列物件:建立一組資料
有三種方式:
A、new 資料型別[]{元素0,元素1....元素n};直接初始化元素的方式,在[]中不能定義長度
如 new int[]{1,2,3};
B、使用長度建立陣列:new 資料型別[長度];
建立陣列,並且初始化每個元素為“零”值
如:new int[3];//等價於new int[0,0,0];
C、靜態初始化,相當於A方式的簡寫,只用於宣告陣列的同時初始化元素
如int[] ary={4,5,6};等價於int[] ary = new int[]{4,5,6};


3.陣列元素(陣列中每一個個體)
如何訪問陣列元素
A.使用[陣列下標(序號)]讀取,或改寫陣列元素
ary[3]=6;將下標為3的元素改為6
int n = ary[3];將ary引用的陣列中下標為3的元素的值獲取,賦值給int型別的n
如果arry的值為null,會出現空指標異常
如果陣列中沒有下標為3的元素,會出現下標越界異常
B.使用.length屬性獲取陣列長度(元素的個數)
注意:
1.陣列的長度不可以改變。length是隻讀屬性
2.如果沒有陣列(ary=null),訪問長度屬性,會發生空指標異常
3.陣列中,最後元素的位置length-1 不是length




方法(Method)
1.在業務功能方面:方法是軟體的功能,是軟體業務中的動詞
如:飛機可以被子彈打掉。檢查飛機是否被擊中就是方法
2.方法在程式碼層面就是利用資料進行計算的演算法。
如:檢查飛機是否被擊中,就是一個演算法:判斷一個點是否在矩形之內


方法的語法:3個要素
返回值型別  方法名  引數列表
語法:
public static 返回值型別 方法名 (引數列表){
//方法體,演算法的過程
}


public static boolean hit(int x1,int y1,int x,int y,int w,int h){
//計算飛機被打中的演算法過程
}


方法的業務目的:檢查飛機是否被子彈擊中
返回值型別:boolean 返回值型別代表方法處理的結果
返回的結果是true,表示飛機被擊中
        fales,飛機沒有被擊中
        
方法名:hit是java中的識別符號(自己命名的)
一般情況下要求見名知意        
如:hit 撞擊,檢查是否被撞擊
引數列表:是演算法的前提條件
如:int x1.int y1表示子彈的引數
   int x,int y,int w,int h 代表飛機的引數
方法的引數是區域性變數,作用域為方法體的範圍,離開方法體,會被GC回收


方法體:{//實現方法體} 方法體中的計算過程就是演算法


使用方法名呼叫方法,執行方法的功能,得到方法的執行結果,執行結果就是返回值。這個過程稱之為方法的呼叫
注意:方法在類中宣告