1.1.1 基礎(chǔ)語言要素
1)標(biāo)識符:給類奶浦、方法、變量起的名字
A.必須以字母或下劃線或$$符號開始捎迫,其余字符可以是字母晃酒、數(shù)字、$ 符號和下劃線窄绒。
B.只能包含兩個特殊字符贝次,即下劃線 _ 和美元符號 $ 。不允許有任何其他特殊字符彰导。
C.標(biāo)識符不能包含空格蛔翅。
D.區(qū)分大小寫。
2)關(guān)鍵字:只有系統(tǒng)才能用的標(biāo)識符
u 注意事項:
v true位谋、false山析、null不是關(guān)鍵字!是字面量掏父。
v main不是關(guān)鍵字笋轨!但是是一個特殊單詞,可以被JVM識別赊淑,主函數(shù)是固定格式爵政,作為程序的入口。
3)注釋:單行注釋:// 多行注釋:/* ……/ 文檔注釋:/……/
u 注意事項:開發(fā)中類前陶缺、屬性前钾挟、方法前,必須有文檔注視饱岸。
1.1.2 八種基本數(shù)據(jù)類型
1)四種整數(shù)類型(byte掺出、short徽千、int、long):
byte:8位蛛砰,用于表示最小數(shù)據(jù)單位罐栈,如文件中數(shù)據(jù),-128~127
short:16位泥畅,很少用荠诬,-32768 ~ 32767
int:32位、最常用位仁,-231-1~231 (21億)
long:64位柑贞、次常用
u 注意事項:
v int i=5; // 5叫直接量(或字面量),即直接寫出的常數(shù)聂抢。
v 整數(shù)字面量默認(rèn)都為int類型钧嘶,所以在定義的long型數(shù)據(jù)后面加L或l。
v 小于32位數(shù)的變量琳疏,都按int結(jié)果計算有决。
v 強轉(zhuǎn)符比數(shù)學(xué)運算符優(yōu)先級高。見常量與變量中的例子空盼。
2)兩種浮點數(shù)類型(float书幕、double):
float:32位,后綴F或f揽趾,1位符號位台汇,8位指數(shù),23位有效尾數(shù)篱瞎。
double:64位苟呐,最常用,后綴D或d俐筋,1位符號位牵素,11位指數(shù)筒占,52位有效尾數(shù)簸呈。
u 注意事項:
v 二進制浮點數(shù):1010100010=101010001.02=10101000.10210(2次方)=1010100.010*211(3次方)= . 1010100010*2^1010(10次方)
v 尾數(shù): . 1010100010 指數(shù):1010 基數(shù):2
v 浮點數(shù)字面量默認(rèn)都為double類型川慌,所以在定義的float型數(shù)據(jù)后面加F或f扁誓;double類型可不寫后綴,但在小數(shù)計算中一定要寫D或X.X噪生。
v float 的精度沒有l(wèi)ong高,有效位數(shù)(尾數(shù))短。
v float 的范圍大于long 指數(shù)可以很大抱怔。
v 浮點數(shù)是不精確的,不能對浮點數(shù)進行精確比較嘀倒。
3)一種字符類型(char):
char:16位屈留,是整數(shù)類型局冰,用單引號括起來的1個字符(可以是一個中文字符),使用Unicode碼代表字符灌危,0~2^16-1(65535)康二。
u 注意事項:
v 不能為0個字符。
v 轉(zhuǎn)義字符:\n 換行 \r 回車 \t Tab字符 " 雙引號 \ 表示一個\
v 兩字符char中間用“+”連接勇蝙,內(nèi)部先把字符轉(zhuǎn)成int類型沫勿,再進行加法運算,char本質(zhì)就是個數(shù)味混!二進制的产雹,顯示的時候,經(jīng)過“處理”顯示為字符翁锡。
4)一種布爾類型(boolean):true真 和false假蔓挖。
5)類型轉(zhuǎn)換: char-->
自動轉(zhuǎn)換:byte-->short-->int-->long-->float-->double
強制轉(zhuǎn)換:①會損失精度,產(chǎn)生誤差馆衔,小數(shù)點以后的數(shù)字全部舍棄瘟判。
②容易超過取值范圍。
1.1.3 常量和變量
變量:內(nèi)存中一塊存儲空間角溃,可保存當(dāng)前數(shù)據(jù)拷获。在程序運行過程中,其值是可以改變的量开镣。
1)必須聲明并且初始化以后使用(在同一個作用域中不能重復(fù)聲明變量)刀诬!
2)變量必須有明確類型(Java是強類型語言)。
3)變量有作用域(變量在聲明的地方開始邪财,到塊{}結(jié)束)陕壹。變量作用域越小越好。
4)局部變量在使用前一定要初始化树埠!成員變量在對象被創(chuàng)建后有默認(rèn)值糠馆,可直接用。
5)在方法中定義的局部變量在該方法被<u>加載</u>時創(chuàng)建怎憋。
常量:在程序運行過程中又碌,其值不可以改變的量。
u 注意事項:
v 字面量绊袋、常量和變量的運算機制不同毕匀,字面量、常量由編譯器計算癌别,變量由運算器處理皂岔,目的是為了提高效率。
eg:小于32位數(shù)的字面量處理
//byte b3 = b1+b2;//編譯錯誤展姐,按照int結(jié)果躁垛,需要強制轉(zhuǎn)換
byte b3 = (byte)(b1+b2);
//byte b3 = (byte)b1+(byte)b2;//編譯錯誤剖毯!兩個byte、short教馆、char相加還是按int算
System.out.println(b3); //選擇結(jié)果:A編譯錯誤B運行異常 C 4 D b3
byte b4 = 1+3;//字面量運算逊谋,編譯期間替換為4,字面量4
//byte b4 = 4; 不超過byte就可以賦值
v 不管是常量還是變量土铺,必須先定義胶滋,才能夠使用。即先在內(nèi)存中開辟存儲空間舒憾,才能夠往里面放入數(shù)據(jù)镀钓。
v 不管是常量還是變量,其存儲空間是有數(shù)據(jù)類型的差別的镀迂,即有些變量的存儲空間用于存儲整數(shù)丁溅,有些變量的存儲空間用于存儲小數(shù)。
1.1.4 運算符與表達式
1)數(shù)學(xué)運算:+ - * / % ++ --
u 注意事項:
v + - * / 兩端的變量必須是同種類型探遵,并返回同種類型窟赏。
v % 取余運算,負(fù)數(shù)的余數(shù)符號與被模數(shù)符號相同箱季, - 1 % 5 = - 1涯穷,1 % - 5 = 1;Num % n藏雏,n>0拷况,結(jié)果范圍[0,n),是周期函數(shù)掘殴。
v 注意整除問題:1 / 2 = 0(整數(shù)的除法是整除)1.0 / 2 = 0.5 1D / 2 = 0.5
v 單獨的前赚瘦、后自增或自減是沒區(qū)別的,有了賦值語句或返回值奏寨,則值不同起意!
eg1:自增自減
第1步:后++,先確定表達式a++的值(當(dāng)前a的值) a++ ---->1
第2步:++病瞳,給a加1 a ---->2
第3步:最后賦值運算,把a++整個表達式的值賦值給a a ---->1
a被賦值兩次揽咕,第1次a = 2,第2次把1賦值給1
eg2:自增自減
x套菜,y亲善,z分別為5,6逗柴,7 計算z + = -- y * z++ 蛹头;// x = 5,y = 5,z = 42
z = z + -- y * z++ à 42 = 7 + 5 * 7 從左到右入棧掘而,入的是值
eg3:取出數(shù)字的每一位
d = num%10;//獲取num的最后一位數(shù) num/=10; //消除num的最后一位
2)位運算:& | ~(取反) ^(異或)>> << >>>
u 注意事項:
v 一個數(shù)異或同一個數(shù)兩次,結(jié)果還是那個數(shù)于购。
v |:上下對齊袍睡,有1個1則為1;&:上下對齊肋僧,有1個0則為0斑胜;(都為二進制)
v &相當(dāng)于乘法,| 相當(dāng)于加法嫌吠;&:有0則為0止潘,| :有1則為1,^:兩數(shù)相同為0辫诅,不同為1凭戴。
3)關(guān)系運算符:> < >= <= == !=
4)邏輯運算符:&& ||(短路) ! & |
eg:短路運算:&&:前為flase,則后面不計算炕矮;|| :前為true么夫,則后面不計算
int x=1,y=1,z=1;
if(x--==1 && y++==1 || z++==1) // || 短路運算后面的不執(zhí)行了!
System.out.println(“x=”+x+”,y=”+y+”,z=”+z);// 0 , 2, 1
5)賦值運算符:= += -= *= /= %=
eg:正負(fù)1交替
int flag= -1; System.out.println(flag *= -1); ……
6)條件(三目)運算符:表達式1 肤视? 表達式2 :表達式3
u 注意事項:
v 右結(jié)合性:a > b ? a : i > j ? i : j 相當(dāng)于 a > b ? a : ( i > j ? i : j )
v 三目運算符中:第二個表達式和第三個表達式中如果都為基本數(shù)據(jù)類型档痪,整個表達式的運算結(jié)果由容量高的決定。如:int x = 4; x > 4 ? 99.9 : 9;
99.9是double類型邢滑,而9是int類型腐螟,double容量高,所以最后結(jié)果為9.9困后。
7) 運算符優(yōu)先級:括號 > 自增自減 > ~ ! > 算數(shù)運算符 > 位移運算 > 關(guān)系運算 > 邏輯運算 > 條件運算 > 賦值運算
1.1.5 編程風(fēng)格
MyEclipse/Eclipse中出現(xiàn)的紅色叉叉:編譯錯誤
編譯錯誤:java編譯器在將Java源代碼編譯為class文件的過程出現(xiàn)的錯誤乐纸,一般是語法使用錯誤!當(dāng)有編譯錯誤時候操灿,是沒有class文件產(chǎn)生锯仪,也就不能運行程序。
Java 程序結(jié)構(gòu):
1.1.6 流程控制語句
1)選擇控制語句
if語句:if 趾盐、if-else庶喜、if-else-if:可以處理一切分支判斷。
格式:if(判斷){…}救鲤、if(判斷){…}else{…}久窟、if(判斷){…}else if(判斷){…}
switch語句:switch(必須整數(shù)類型){case 常量1:…; case 常量2:… ; ….}
u 注意事項:
v int類型指:byte、short本缠、int斥扛,只能寫long類型,要寫也必須強轉(zhuǎn)成int類型;而byte稀颁、short為自動轉(zhuǎn)換成int芬失。
v swtich-case:若case中無符合的數(shù),并且default寫在最前(無break時)匾灶, 則為順序執(zhí)行棱烂,有break或 } 則退出。
v swtich-case:若case中無符合的數(shù)阶女,并且default寫在最后颊糜,則執(zhí)行default。
v swtich-case:若case中有符合的數(shù)秃踩,并且default寫在最后衬鱼,并且default前面的case沒有break時,default也會執(zhí)行憔杨。
2)循環(huán)控制語句
①for:最常用鸟赫,用在與次數(shù)有關(guān)的循環(huán)處理,甚至只用for可以解決任何循環(huán)問題消别。
u 注意事項:for中定義的用于控制次數(shù)的循環(huán)變量惯疙,只在for中有效,for結(jié)束則循環(huán)變量被釋放(回收)妖啥。
②while:很常用霉颠,用在循環(huán)時候要先檢查循環(huán)條件再處理循環(huán)體,用在與次數(shù)無關(guān)的情況荆虱。如果不能明確結(jié)束條件的時候蒿偎,先使用while(true),在適當(dāng)條件使用if語句加break結(jié)束循環(huán)怀读。
③do-while:在循環(huán)最后判斷是否結(jié)束的循環(huán)诉位。如:使用while(true) 實現(xiàn)循環(huán)的時候,結(jié)束條件break在while循環(huán)體的最后菜枷,就可以使用 do-while 苍糠。do-while 的結(jié)束條件經(jīng)常是“否定邏輯條件”,不便于思考業(yè)務(wù)邏輯啤誊,使用的時候需要注意岳瞭。可以利用while(true)+ break 替換蚊锹。
④循環(huán)三要素:A.循環(huán)變量初值 B.循環(huán)條件 C.循環(huán)變量增量(是循環(huán)趨于結(jié)束的表達式)
⑤for和while循環(huán)體中僅一條語句瞳筏,也要補全{ },當(dāng)有多條語句牡昆,且不寫{ }時姚炕,它們只執(zhí)行緊跟著的第一條語句。
⑥循環(huán)的替換:
while(布爾表達式){} 等價 for(;布爾表達式;){}
while(true){} 等價 for(;;)
while(true){} + break 替換 do{}while(布爾表達式);
for(;;) + break 替換 do{}while(布爾表達式);
3)跳轉(zhuǎn)控制語句
continue:退出本次循環(huán),直接執(zhí)行下一次循環(huán)
break:退出所有循環(huán)
1.1.7 數(shù)組
類型一致的一組數(shù)據(jù)柱宦,相當(dāng)于集合概念些椒,在軟件中解決一組,一堆XX數(shù)據(jù)時候使用數(shù)組掸刊。
1)數(shù)組變量:是引用類型變量(不是基本變量)引用變量通過數(shù)組的內(nèi)存地址位置引用了一個數(shù)組(數(shù)組對象)摊沉,即栓到數(shù)組對象的繩子。
eg:數(shù)組變量的賦值
int[] ary = new int[3];// ary----->{0,0,0}<----ary1
int[] ary1 = ary;// ary 的地址賦值給ary1痒给,ary 與 ary1 綁定了同一個數(shù)組
//ary[1] 與 ary1[1] 是同一個元素,數(shù)組變量不是數(shù)組(數(shù)組對象)
2)數(shù)組(數(shù)組對象)有3種創(chuàng)建(初始化)方式:①new int[10000] 給元素數(shù)量骏全,適合不知道具體元素苍柏,或元素數(shù)量較多時 ②new int[]{3,4,5} 不需要給出數(shù)量,直接初始化具體元素適合知道數(shù)組的元素姜贡。③ {2,3,4} 靜態(tài)初始化试吁,是②簡化版,只能用在聲明數(shù)組變量的時候直接初始化楼咳,不能用于賦值等情況熄捍。
eg:數(shù)組初始化
int[] ary1 = new int[]{2,3,4};//創(chuàng)建數(shù)組時候直接初始化元素
int[] ary2 = {2,3,4};//數(shù)組靜態(tài)初始化,只能在聲明變量的同時直接賦值
//ary2 = {4,5,6};//編譯錯誤母怜,不能用于賦值等情況
ary2 = new int[]{4,5,6};
3)數(shù)組元素的訪問:①數(shù)組長度:長度使用屬性訪問余耽,ary.length 獲取數(shù)組下標(biāo)。②數(shù)組下標(biāo):范圍:0 ~ length-1就是[0,length)苹熏,超范圍訪問會出現(xiàn)下標(biāo)越界異常碟贾。③使用[index] 訪問數(shù)組元素:ary[2]。④迭代(遍歷):就是將數(shù)組元素逐一處理一遍的方法轨域。
4)數(shù)組默認(rèn)初始化值:根據(jù)數(shù)組類型的不同袱耽,默認(rèn)初始化值為:0(整數(shù))、0.0(浮點數(shù))干发、false(布爾類型)朱巨、\u0000(char字符類型,顯示無效果枉长,相當(dāng)于空格冀续,編碼為0的字符,是控制字符必峰,強轉(zhuǎn)為int時顯示0)沥阳、null(string類型,什么都沒有自点,空值的意思)桐罕。
5)數(shù)組的復(fù)制:數(shù)組變量的賦值,是并不會復(fù)制數(shù)組對象,是兩個變量引用了同一個數(shù)組對象功炮。數(shù)組復(fù)制的本質(zhì)是創(chuàng)建了新數(shù)組溅潜,將原數(shù)組的內(nèi)容復(fù)制過來。
6)數(shù)組的擴容:創(chuàng)建新數(shù)組薪伏,新數(shù)組容量大于原數(shù)組滚澜,將原數(shù)組內(nèi)容復(fù)制到新數(shù)組,并且丟棄原數(shù)組嫁怀,簡單說:就是更換更大的數(shù)組對象设捐。System.arraycopy() 用于復(fù)制數(shù)組內(nèi)容,簡化版的數(shù)組復(fù)制方法:Arrays.copyOf()方法塘淑,但需JKD1.5+萝招。
1.1.8 字符串
字符串(string):永遠用“”雙引號(英文狀態(tài)下),用字符串連接任何數(shù)據(jù)(整數(shù))存捺,都會默認(rèn)的轉(zhuǎn)化為字符串類型槐沼。
字符串與基本數(shù)據(jù)類型鏈接的問題:如果第一個是字符串那么后續(xù)就都按字符串處理,如System.out.println("(Result)"+6 + 6 );那么結(jié)果就是(Result)66捌治,如果第一個和第二個…第n個都是基本數(shù)據(jù)岗钩,第n+1是字符串類型,那么前n個都按加法計算出結(jié)果在與字符串連接肖油。如下例中的System.out.println(1+2+”java”+3+4);結(jié)果為3java34兼吓。
eg:字符串前后的“+”都是連接符!不是加法運算符森枪!
System.out.println("A"+'B');//AB
System.out.println('A'+'B');//131
System.out.println(1+2+”java”+3+4);//3java34
u 注意事項:比較字符串是否相等必須使用equals方法周蹭!不能使用==。"1".equals(cmd) 比cmd.equals("1") 要好疲恢。
1.1.9 方法三要素
方法:method(函數(shù)function = 功能) y=f(x)
1)方法的主要三要素:方法名凶朗、參數(shù)列表、返回值显拳。
2)什么是方法:一個算法邏輯功能的封裝棚愤,是一般完成一個業(yè)務(wù)功能,如:登錄系統(tǒng)杂数,創(chuàng)建聯(lián)系人宛畦,簡單說:方法是動作,是動詞揍移。
3)方法名:一般按照方法實現(xiàn)的功能定名次和,一般使用動詞定義,一般使用小寫字母開頭那伐,第二個單詞開始踏施,單詞首字母大寫石蔗。如:createContact() 。
4)參數(shù)列表:是方法的前提條件畅形,是方法執(zhí)行依據(jù)养距,是數(shù)據(jù)。如:
login(String id, String pwd) 日熬,參數(shù)的傳遞看定義的類型及順序棍厌,不看參數(shù)名。
5)方法返回值:功能執(zhí)行的結(jié)果竖席,方法必須定義返回值耘纱,并且方法中必須使用return語句返回數(shù)據(jù);如果無返回值則定義為void毕荐,此時return語句可寫可不寫束析;返回結(jié)果只能有一個,若返回多個結(jié)果东跪,要用數(shù)組返回(返回多個值)。
u 注意事項:遞歸調(diào)用:方法中調(diào)用了方法本身鹰溜,用遞歸解決問題比較簡練虽填,只需考慮一層邏輯即可!但是需要有經(jīng)驗曹动。一定要有結(jié)束條件斋日!如:f(1)=1; 遞歸層次不能太深∧钩拢總之:慎用遞歸恶守!