1.常量--常量表示不能改變的的數值
Java中常量的分類:
1,整數常量。所有整數
2,小數常量。所有小數
3,布爾型常量。較為特有,只有兩個數值。true false。
4,字元常量。將一個數字字母或者符號用單引號( ' ' )標識。
5,字串常量。將一個或者多個字元用雙引號(" ")標識。
6,null常量。只有一個數值就是:null.
對於整數:java有三種表現形式。
- 十進位:0-9 ,滿10進1.
- 八進位:0-7 ,滿8進1. 用0開頭表示。
- 十六進位:0-9,A-F,滿16進1. 用0x開頭表示。
對於整數:java有三種表現形式。
- 十進位:0-9 ,滿10進1.
- 八進位:0-7 ,滿8進1. 用0開頭表示。
- 十六進位:0-9,A-F,滿16進1. 用0x開頭表示。
進位的基本轉換
十進位二進位 互轉
十進位轉成二進位:
除以2取餘數 如 :6/2 商3餘0 3/2商1餘1 1/2 商0餘1 6的二進位是 110
二進位轉成十進位
乘以2的冪數 如 1001 1*2^3+2*2^0=9
十進位 八進位 互轉
十進位 十六進位 互轉
負數的二進位表現形式(反碼)
對應的正數二進位取反加1
比如: -6
6 00000000 00000000 00000000 00000110
取反 11111111 11111111 11111111 11111001
+1 1
--------------------------------------------------------------------------------
11111111 11111111 11111111 11111010
十進位-》十六進位 方法 :方法先將十進位轉換成二進位 再將二進位轉換成(四個位代表一個位)十六進位
比如: 90 ----> 0101 1010 ---->0x5A
2.變數
變數的概念:
- 記憶體中的一個儲存地區
- 該地區有自己的名稱(變數名)和類型(資料類型)
- 該地區的資料可以在同一類型範圍內不斷變化
為什麼要定義變數:
用來不斷的存放同一類型的常量,並可以重複使用
使用變數注意:
定義變數的格式:資料類型 變數名
= 初始化值;
註:格式是固定的,記住格式,以不變應萬變。理解:變數就如同數學中的未知數。
資料類型
基礎資料型別 (Elementary Data Type)
數值型
字元型(char)
布爾型(boolean)
整數類型(byte, short, int, long)
浮點類型(float, double)
引用資料類型
類(class)
介面(interface)
數組( [ ] )
整數預設:int 小數預設:double
Java語言是強型別語言,對於每一種資料都定義了明確的具體資料類型,在記憶體總分配了不同大小的記憶體空間
3.類型轉換
自動類型轉換(也叫隱式類型轉換)
強制類型轉換(也叫顯式類型轉換)
類型轉換的原理
什麼時候要用強制類型轉換?
運算式的資料類型自動提升
- 所有的byte型、short型和char的值將被提升到int型。
- 如果一個運算元是long型,計算結果就是long型;
- 如果一個運算元是float型,計算結果就是float型;
- 如果一個運算元是double型,計算結果就是double型。
分析:
System.out.println(‘a’)與System.out.println(’a’+1) 的區別。
System.out.println('a');//輸出 a
System.out.println('a'+1);//'a'進行型別提升 結果是97+1=98
自動型別提升
byte b = 3;
int x = 4;
x = x + b;//b會自動提升為int類型進行運算。
強制類型轉換
byte b = 3;
b = b + 4;//報錯
b = (byte)b+4;//強制類型轉換,強制將b+4的結果轉換為byte類型,再賦
值給b。
思考:
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是編譯失敗的呢?為什麼呢?
short s=3;
s=s+2; //編譯失敗 s+2結果是整型,無法用short接收
s+=2 //編譯通過, +=兩邊的數運算後 兩邊會自動進行型別提升
算術運算子的注意問題:如果對負數模數,可以把模數負號忽略不記,如:5%-2=1。但被模數是負數就另當別論。
對於除號“/”,它的整數除和小數除是有區別的:整數之間做除法時,只保留整數部分而捨棄小數部分。
例如:int x=3510;x=x/1000*1000; x的結果是 0
“+”除字串相加功能外,還能把非字串轉換成字串 ,
例如:System.out.println("5+5="+5+5);//列印結果是?
System.out.println("5+5="+5+5);//輸出: 5+5=55
賦值運算子
符號:
= , +=, -=, *=, /=, %=
樣本:
int a,b,c; a=b=c =3;
int a = 3; a+=5;等同運算a=a+5;
比較子
4>=3 true(大於或者等於其中一個滿足就true)
注1:比較子的結果都是boolean型,也就是要麼是true,要麼是false。
注2:比較子“==”不能誤寫成“=” 。
邏輯運算子
邏輯運算子用於串連布爾型運算式,在Java中不可以
寫成3<x<6,應該寫成x>3 & x<6 。
“&”和“&&”的區別:
- 單&時,左邊無論真假,右邊都進行運算;
- 雙&時,如果左邊為真,右邊參與運算,如果左邊為假,那麼右邊不參與運算。
“|”和“||”的區別同理,雙或時,左邊為真,右邊不參與運算。
異或( ^ )與或( | )的不同之處是:當左右都為true時,結果為false。
位元運算符
- << 空位補0,被移除的高位丟棄,空缺位補0。
- >>被移位的二進位最高位是0,右移後,空缺位補0;最高位是1,空缺位補1。
- >>> 被移位二進位最高位無論是0或者是1,空缺位都用0補。
- & 二進位位進行&運算,只有1&1時結果是1,否則是0;
- | 二進位位進行 | 運算,只有0 | 0時結果是0,否則是1;
- ^任何相同二進位位進行 ^ 運算,結果是0;1^1=0 , 0^0=0不相同二進位位 ^ 運算結果是1。1^0=1 , 0^1=1
- << 空位補0,被移除的高位丟棄,空缺位補0。
- >>被移位的二進位最高位是0,右移後,空缺位補0;最高位是1,空缺位補1。
- >>> 被移位二進位最高位無論是0或者是1,空缺位都用0補。
- & 二進位位進行&運算,只有1&1時結果是1,否則是0;
- | 二進位位進行 | 運算,只有0 | 0時結果是0,否則是1;
- ^任何相同二進位位進行 ^ 運算,結果是0;1^1=0 , 0^0=0不相同二進位位 ^ 運算結果是1。1^0=1 , 0^1=1
- 左移:<< 高位向左移動,低位用0補齊。實際上是被移數乘以2的移動位元次冪
- 右移:>> 低位向右移動,高位如果移動的數是負數用1補齊 正數用0補齊,實際上是被移動數除以2的移動位元次冪
2<<3 = 2* 2^3=2*8=16 6>>2 = 6/2^2=6/4=1
一個數異或一個數兩次 等於原數
比如 7^4^4 =7 (可以用來加密解密)
不設定第三變數 交換兩個變數
n=n^m;
m=n^m; //n^m=(n^m)^m=n
n=n^m; //n^m=(n^m)^n=m
三元運算子
格式
- (條件運算式)?運算式1:運算式2;
- 如果條件為true,運算後的結果是運算式1;
- 如果條件為false,運算後的結果是運算式2;
樣本:
擷取兩個數中大數。
int x=3,y=4,z;
z = (x>y)?x:y;//z變數儲存的就是兩個數的大數。
public class Test{
public static void main(String[] args)
{
char x='Y';
int i=1;
System.out.println(true? x:i);
System.out.println(false ? 1:x);
}
} 這個輸出為什麼是89和Y,不是Y和Y呢?
分析:
(1)如果運算式1和運算式2具有相同的類型,那麼整個條件運算子結果的類型就是這個類型。
(2)如果一個運算式的類型是T,T是byte或short或char,另一個運算式的類型是int類型的常量運算式,
而且這個常量運算式的值是可以用類型T表示的(也就是說,常量運算式的值是在類型T的取值範圍之內),
那麼整個條件運算子結果的類型就是T。
(3)除以上情況外,如果運算式1和運算式2的類型不同,那麼將進行型別提升,整個條件運算子結果的類型就是提升後的類型。
System.out.println(true?x:0); / /運算式1是char類型,運算式2是int類型的常量運算式,
而且這個常量運算式的值0可以用char類型來表示,因此整個條件運算子結果的類型就應當是char類型,所以輸出的結果就是'A'。
System.out.println(true?x:1111111110); 。運算式1是char類型,運算式2是int類型的常量運算式,
但是這個常量運算式的值已經超出了char類型的取值範圍,因此要進行型別提升,把char型別提升為int類型,
整個條件運算子結果的類型就是int類型了,所以輸出的結果是65(字元A的ASCII碼)。
System.out.println(false?i:x); / /運算式1是int類型的變數,運算式2是char類型的變數,
有常量運算式。因此要進行型別提升,把char型別提升為int類型,整個條件運算子結果的類型就是int類型。所以輸出結果就是65。
程式流程式控制制
(1)判斷語句if
1. if(條件運算式)
{
執行語句;
}
2. if(條件運算式)
{
執行語句;
}
else
{
執行語句;
}
3. if(條件運算式)
{
執行語句;
}
else if (條件運算式)
{
執行語句;
}
……
else
{
執行語句;
}
if語句特點:
a,每一種格式都是單條語句。
b,第二種格式與三元運算子的區別:三元運算子運算
完要有值出現。好處是:可以寫在其他運算式中。
c,條件運算式無論寫成什麼樣子,只看最終的結構是
否是true 或者 false;
(2)選擇語句 switch
switch語句 格式:
switch(運算式)
{
case 取值1:
執行語句;
break;
case 取值2:
執行語句;
break;
…...
default:
執行語句;
break;
}
switch語句特點:
a,switch語句選擇的類型只有四種:byte,short,int , char。
b,case之間與default沒有順序。先執行第一個case,沒有匹配的case執行default。
c,結束switch語句的兩種情況:遇到break,執行到switch語句結束。
d,如果匹配的case或者default沒有對應的break,那麼程式會繼續向下執行,運行可以執行的語句,直到遇到break或者switch結尾結束。
************
switch()語句裡面接收四種型別參數 byte short char int JDK5.0支援枚舉 JDK7.0支援字串
int c=5;
switch (c)
{
default:
System.out.println("default");
break;
case 1:
System.out.println("11111111");
break;
case 2:
System.out.println("2222222");
break;
case 3:
System.out.println("3333333");
case 4:
System.out.println("4444444");
break;
case 5:
System.out.println("5555555");
} //不會執行 default 因為執行完case 5後碰到大括弧了
int c=6;
switch (c)
{
default:
System.out.println("default");
case 1:
System.out.println("11111111");
case 2:
System.out.println("2222222");
break;
case 3:
System.out.println("3333333");
case 4:
System.out.println("4444444");
break;
case 5:
System.out.println("5555555");
break;
}//先每個判斷一次,沒有合格,會執行 default 接著case 1 case 2遇到break才停止
(3)迴圈結構
代表語句:while , do while , for
do while特點是條件無論是否滿足,
迴圈體至少被執行一次。
其他流程式控制制語句:
break(跳出),
continue(繼續)
break語句:應用範圍:選擇結構和迴圈結構。
continue語句:應用於迴圈結構。
註:
a,這兩個語句離開應用範圍,存在是沒有意義的。
b,這個兩個語句單獨存在下面都不可以有語句,因為執行不到。
c,continue語句是結束本次迴圈繼續下次迴圈。
d,標號的出現,可以讓這兩個語句作用於指定的範圍。