1.常量包括
(1)字符串常量,用雙引號括起來的內容
(2)整數(shù)常量,所有整數(shù)
(3)小數(shù)常量 ,所有小數(shù)
(4)字符常量 用單引號括起來的內容,里面只能放單個數(shù)字,單個字母或單個符號
(5)布爾常量 較為特殊,只有true和false
(6)空常量 ? ? null(數(shù)組部分講解)

2.進制
二進制以0b開頭,八進制以0開頭,十六進制以0x開頭

3.原碼,反碼,補碼
(1)原碼
? ? ? ? 就是二進制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其余位表示數(shù)值的大小。
? ? ? ? 通過一個字節(jié),也就是8個二進制位表示+7和-7
? ? ? ?? 0(符號位)????0000111 ? ? ? ? ? ?? +7
? ? ? ?? 1(符號位)????0000111 ? ? ? ? ? ?? -7
?? (2)反碼
? ? ? ? 正數(shù)的反碼與其原碼相同(+7的反碼為00000111);負數(shù)的反碼是對其原碼逐位取反,但符號位除外(-7的反碼為11111000)。
? ? (3) 補碼
? ? ? ?? 正數(shù)的補碼與其原碼相同(+7的補碼為00000111);負數(shù)的補碼是在其反碼的末位加1(-7的反碼為11111001)。?

4.數(shù)據(jù)類型
Java中數(shù)據(jù)類型的分類
?(1)基本數(shù)據(jù)類型
?(2)引用數(shù)據(jù)類型?
基本數(shù)據(jù)類型分類(4類8種)
整數(shù)型
? ? ?? byte 占一個字節(jié)? -128到127
? ? ? short 占兩個字? -2^15~2^15-1
? ? ?? int 占四個字節(jié) -2^31~2^31-1
? ? ? long 占八個字節(jié) -2^63~2^63-1
?? 浮點型
? ? ? ?? float 占四個字節(jié) -3.403E38~3.403E38? 單精度
? ? ? ?? double 占八個字節(jié)-1.798E308~1.798E308 雙精度
?? 字符型
? ? ? ? char 占兩個字節(jié) 0~65535
? 布爾型
? ? ? ? boolean?
?boolean理論上是占八分之一個字節(jié),因為一個開關就可以決定是true和false了,但是java中boolean類型沒有明確指定他的大小 ?
特別注意:
float f = 12.3F; //占四個字節(jié)
double d = 33.4; //占八個字節(jié) 小數(shù)默認的數(shù)據(jù)類型是double,double類型后面也可以用D或d標識,但是一般不加
System.out.println(f);
System.out.println(d);
因為小數(shù)的數(shù)據(jù)類型默認是double類型的,12.3是double類型,轉為float類型會損失精度,所以需要寫成float f = 12.3F

如果超過int的取值范圍-21億~21億,需要用long類型的話,需要在數(shù)值后面加上L,一般是大寫,小寫的l容易和1混淆。
5.數(shù)據(jù)類型轉換
隱式轉換
int x = 3;
byte b = 4;
x = x + b;
System.out.println(x);
x是int類型,b是byte類型,兩者相加后賦值給x是int類型,這叫隱式轉換
強制轉換
int x = 3;
byte b = 4;
b = (byte)(x + b);
System.out.println(b);
x是int類型,b是byte類型,兩者相加后賦值給b是byte類型,需要強制轉換
注意:
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
上面第三行代碼是錯誤的,因為1.byte與byte(或short,char)進行運算的時候會提升為int,兩個int類型相加的結果也是int類型2.b1和b2是兩個變量,變量存儲的值是變化,在編譯的時候無法判斷里面具體的值,相加有可能會超出byte的取值范圍
byte b4 = 3 + 4;
這行代碼沒有問題,因為java編譯器有常量優(yōu)化機制,byte的取值范圍為-128~127,沒有超過byte的范圍
**進行混合運算的時候,byte,short,char不會相互轉換,都會自動類型提升為int類型,其他類型進行混合運算的是小的數(shù)據(jù)類型提升為大的
byte,short,char -- int -- long -- float -- double
6.字符和字符串參與運算
ASCII碼表中,0對應48,A對應65,a對應97
System.out.println('a' + 1); //98,因為有ASCII碼表,a字符對應的是int類型的97
System.out.println((char)('a' + 1)); ? 輸出b
System.out.println("hello"+'a'+1); //任何數(shù)據(jù)類型用+與字符串相連接都會產生新的字符串,輸出helloa1
System.out.println('a'+1+"hello");? 輸出98hello
System.out.println(" 5 + 5 = " + (5 + 5)); ? 輸出5 + 5 = 10,括號具有較高的優(yōu)先級
System.out.println(" 5 + 5 = " + 5 + 5); ? 輸出5 + 5 = 55
7.char字符
char c = 'a';
System.out.println(c);
char c1 = 97; //0 - 65535
System.out.println(c1);
都是輸出a,char的數(shù)值范圍為0-65535
注意:
Java語言中的字符char可以存儲一個中文漢字,因為Java語言采用的是Unicode編碼。Unicode編碼中的每個字符占用兩個字節(jié)。中文也是占的兩個字節(jié),所以,Java中的字符可以存儲一個中文漢字
8.算術運算符
(1)運算符的分類
算術運算符,賦值運算符,比較(關系或條件)運算符,邏輯運算符,位運算符,三目(元)運算符?
(2)算數(shù)運算符有哪些
+,-,*,/,%,++,--?
注意:
a:+號在java中有三種作用,代表正號,做加法運算,字符串的連接符
b:整數(shù)相除只能得到整數(shù)。如果想得到小數(shù),必須把數(shù)據(jù)變化為浮點數(shù)類型
System.out.println(10 / 3); //整數(shù)相除結果只能是整數(shù)
System.out.println(10 / 3.0); //如果想得到小數(shù),把其中一個數(shù)變成小數(shù),另一個數(shù)在運算的時候會自動類型提升
第二個提升為double類型

c:/獲取的是除法操作的商,%獲取的是除法操作的余數(shù)
%運算符
當左邊的絕對值小于右邊絕對值時,結果是左邊 ? ? ? ? ? ? ? ? ? ?? 2%5=2
?當左邊的絕對值等于右邊或是右邊的倍數(shù)時,結果是0 ? ? ? ? ?? 10%5=0
當左邊的絕對值大于右邊絕對值時,結果是余數(shù) ? ? ? ? ? ? ? ? ? ? ? 12%5=2
?%運算符結果的符號只和左邊有關系,與右邊無關 ? ? ? ? ? ? ? ? ? 13%-5=3
任何一個正整數(shù)%2結果不是0就是1可以用來當作切換條件?
(3)++,--運算符的作用
?自加(++)自減(--)運算
?++:自加。對原有的數(shù)據(jù)進行+1
--:自減。對原有的數(shù)據(jù)進行-1
注意:a++和++a單獨使用沒有區(qū)別
int a = 3;
int b;
b = a++; //當++在變量后面的時候,會先將變量中的值取出做賦值操作,然后再自身加1
System.out.println("a = " + a);
System.out.println("b = " + b);
輸出:a = 4 ?? b = 3
b = ++a; //當++在變量前面的時候,會先自身加1,然后在將結果賦值
注意:
byte b = 10;
b++;
?b = b + 1;
第三句會報錯,因為b+1是int類型,而賦值給的b是byte類型的。b++不報錯是因為底層會將b+1強轉byte類型
9.賦值運算符
a:基本的賦值運算符:=
? ?? 把=右邊的數(shù)據(jù)賦值給左邊
int a = 3; //把右邊的常量值賦值給左邊的變量,左邊必須是變量
?b:擴展的賦值運算符:+=,-=,*=,/=,%=
? ?? += 把左邊和右邊做加法,然后賦值給左邊。
a += 4; ? ? ? ? ? ?? ==> ? ? ? ? ? ? ? ? a = a + 4; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
注意:
short s=1;s = s+1;
short s=1;s+=1;
第一句:當short與int進行運算的時候,會提升為int類型,兩個int類型相加的結果也是int類型,會報錯
第二句:s = (short)(s + 1),底層會將s強轉為short類型
10.關系運算符
關系運算符有哪些(比較運算符,條件運算符)
? ? ?? ==,!=,>,>=,<,<=
?注意事項:
? ?? 無論你的操作是簡單還是復雜,結果是boolean類型。
? ?? "=="不能寫成"="。
11.邏輯運算符
(1)邏輯運算符有哪些
&,|,^,! ? ? ? ? ^(異或)
&&,|| (短路與,短路或)
(2)注意:
邏輯運算符的結果不是true就是false
邏輯與 & 是并且(and)的意思, 遇false則false
邏輯或? | 是或(or)的意思, 遇true則true
邏輯異或 ^ 兩邊相同為false,兩邊不同為true
邏輯非!? ,取反
(3)&&與&的區(qū)別
a:最終結果一樣。
?b:&&具有短路效果。左邊是false,右邊不執(zhí)行。
?? &是無論左邊是false還是true,右邊都會執(zhí)行
(4)||與|的區(qū)別
a:最終的結果是一樣
b:||具有短路效果,左邊為true,右邊不執(zhí)行
12.位運算符
&(位與),|(位或),^(位異或),~(位取反)?
>>(向左移,無符號),>>>(向左移,有符號),<<(向右移)
(1)& 和 |

&和| 的用法
&:有0則0
?|:有1則1
6的二進制? 110 ? ? ? ? ? ? ?? 110 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 110
3的二進制? 011 ? ? ? ? ?? &? 011 ? ? ? ? ? ? ? ? ? ? ? ? ?? |? 001
-------------------------------------------------------------------------------
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 010? (2) ? ? ? ? ? ? ? ? ?? 111(7)
(2)^ 和 ~

^ 和 ~的用法
^:相同則0,不同則1
~:按位取反
6的二進制? 110 ? ? ? ? ? ? ?? 110 ? ? ? ? ? ? ? ? ? ? ? ? ? ??
3的二進制? 011 ? ? ? ? ?? ^? 011 ??
--------------------------------------------------------------------
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 101(為5)
? 00000000 00000000 00000000 00000110 ? ? ? ? ? ? ? ? 6的原碼,反碼,補碼都是本身
? 11111111 ? 11111111 ? 11111111 ? 11111001 ? ? ? ? ? ? ? ?? 對6取反
- 00000000 00000000 00000000 00000001 ? ? ? ? ? ? ? ? 減1
--------------------------------------------------------------
?? 11111111? 11111111? 11111111 ? 11111000 ? ? ? ? ? ? ? ? ? 反碼
?? 10000000 00000000 00000000 00000111 ? ? ? ? ? ? ? ? 原碼(-7)
(3)位異或運算符的特點
一個數(shù)據(jù)對另一個數(shù)據(jù)位異或兩次,該數(shù)本身不變。

(4)注意:請自己實現(xiàn)兩個整數(shù)變量的交換(不需要定義第三方變量)
第一種
//有弊端,有可能會超出int的取值范圍
x = x + y; //10 + 5 = 15
y = x - y; //15 - 5 = 10
x = x - y; //15 - 10 = 5
第二種
//不需要第三方變量,通過^來做
x = x ^ y; // 10 ^ 5
y = x ^ y; // 10 ^ 5 ^ 5 ? y = 10
x = x ^ y; // 10 ^ 5 ^ 10? x = 5
(5)>>(向左移,無符號),>>>(向左移,有符號),<<(向右移)
左移
//左移,向左移動幾位就是乘以2的幾次冪
System.out.println(12 << 1); //24
System.out.println(12 << 2); //48
右移
//右移,向右移動幾位就是除以2的幾次冪
System.out.println(12 >> 1);? //6
System.out.println(12 >> 2);? //3
(6)最有效率的算出2 * 8的結果
System.out.println(2 << 3);
13.三元運算符
格式:(關系表達式) ? 表達式1 : 表達式2; ? ? ?
?如果為true就是表達式1的值,如果為false,就是表達式2的值
示例:獲取兩個數(shù)中的最大值
int x = 10;
int y = 5;
int z;
z = (x > y) ? x : y;
示例:比較兩個整數(shù)是否相同
boolean b = (x == y);
示例:獲取三個整數(shù)中的最大值
int a = 10;
int b = 20;
int c = 30;
//先比較任意兩個數(shù)的值,找出這兩個數(shù)中的最大值
int temp = (a > b) ? a : b;
//用前兩個數(shù)的最大值與第三個數(shù)比較,獲取最大值
int max = (temp > c) ? temp : c;
14.鍵盤錄入學習
鍵盤錄入兩個數(shù)據(jù),獲取這兩個數(shù)據(jù)中的最大值
Scanner sc = new Scanner(System.in); //創(chuàng)建鍵盤錄入對象
System.out.println("請輸入第一個整數(shù):");
int x = sc.nextInt(); //將鍵盤錄入的數(shù)據(jù)存儲在x中
System.out.println("請輸入第二個整數(shù):");
int y = sc.nextInt(); //將鍵盤錄入的數(shù)據(jù)存儲在y中
int max = (x > y) ? x : y; //獲取x和y中的最大值
System.out.println("max = " + max);
15.流程控制語句
分類
順序結構
選擇結構
循環(huán)結構
16.順序結構: 從上往下,依次執(zhí)行
示例:
System.out.println("Hello World!11111");
System.out.println("Hello World!3333");
System.out.println("Hello World!22222");
System.out.println("Hello World!44444");
17.選擇結構
分類:
if語句
switch語句
(1)if語句的格式1
if(比較表達式) {
????????????語句體;
????????}
注意:
比較表達式無論簡單還是復雜,結果必須是boolean類型
(2)if語句的格式2
if(比較表達式) {
????????????語句體1;
????????}else {
????????????語句體2;
????????}
注意:
首先計算比較表達式的值,看其返回值是true還是false。
如果是true,就執(zhí)行語句體1;
如果是false,就執(zhí)行語句體2;
(3)if語句的格式2和三元的相互轉換
三元運算符實現(xiàn)的,都可以采用if語句實現(xiàn)。反之不成立。
什么時候if語句實現(xiàn)不能用三元改進呢?
當if語句控制的操作是一個輸出語句的時候就不能。
為什么呢?因為三元運算符是一個運算符,運算符操作完畢就應該有一個結果,而不是一個輸出。
(4)if語句的格式3:
if(比較表達式1) {
????????????語句體1;
????????}else if(比較表達式2) {
????????????語句體2;
????????}else if(比較表達式3) {
????????????語句體3;
????????}
????????...
????????else {
????????????語句體n+1;
????????}
執(zhí)行流程:
? ?? 首先計算比較表達式1看其返回值是true還是false,
? ? 如果是true,就執(zhí)行語句體1,if語句結束。
? ? 如果是false,接著計算比較表達式2看其返回值是true還是false,
? ? 如果是true,就執(zhí)行語句體2,if語句結束。
? ? 如果是false,接著計算比較表達式3看其返回值是true還是false,
? ? 如果都是false,就執(zhí)行語句體n+1。
注意事項:最后一個else可以省略,但是建議不要省略,可以對范圍外的錯誤值提示
(5)switch語句的格式
switch(表達式) {
????????? ? ? case 值1:
????????????????語句體1;
????????????????break;
????????????? ? case 值2:
????????????????語句體2;
????????????????break;
????????????? ? …
????????????? ? default:????
????????????????語句體n+1;
????????????????break;
????? ? }
注意:
switch后面的表達式可以接收基本數(shù)據(jù)類型:byte,short,char,int,引用數(shù)據(jù)類型可以接收枚舉(JDK1.5),String字符串(JDK1.7)
示例:
String name = "rose";
String gender = "妖";
switch (gender) {
case "男士":
System.out.println(name + "是一位" + gender + "喜歡吃飯睡覺打dota");
break;
case "女士":
System.out.println(name + "是一位" + gender + "喜歡逛街購物美容");
break;
default:
System.out.println(name + "是一位" + gender + "打雌性激素維持美貌容顏");
break;
注意:
case后面只能是常量,不能是變量,而且,多個case后面的值不能出現(xiàn)相同的
default可以省略嗎?
可以省略,但是不建議,因為它的作用是對不正確的情況給出提示。
特殊情況:
? ? case就可以把值固定。
? ? A,B,C,D
break可以省略嗎?
最后一個可以省略,其他最好不要省略
會出現(xiàn)一個現(xiàn)象:case穿透。
最終我們建議不要省略
default一定要在最后嗎?
不是,可以在任意位置。但是建議在最后。
switch語句的結束條件
a:遇到break就結束了
b:執(zhí)行到switch的右大括號就結束了
(6)示例:
int x = 2;
int y = 3;
switch(x){
default:
y++;
break;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y); ?? ----輸出4
int x = 2;
int y = 3;
switch(x){
default:
y++;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y); ?? ----輸出6