新聞中心
第一、二章:
一、Java開(kāi)發(fā)入門(mén)
1. ① 下載壓縮包, ② 將解壓文件粘貼到新建項(xiàng)目的根, ③ 右鍵構(gòu)建路徑,添加到新的路徑。
2. 加載游戲背景圖,參數(shù)是圖片文件的全名(包含后綴名)。圖片放到src的Images包
3. 音樂(lè)必須放在src的Sounds文件夾下,只支持mp3格式文件
5. false表示只播放一次,true表示一直重復(fù)播放
6. ① 注意各處的大小寫(xiě), ② 注意數(shù)據(jù)類(lèi)型(字符串用雙引號(hào)[英])
二、變量和數(shù)據(jù)類(lèi)型
Ⅰ、變量
1. 程序由指令和數(shù)據(jù)組成。
2. 變量定義不能“重名”,也就是不能重復(fù)“定義”。
3. 在一定范圍內(nèi),“變量”可以重復(fù)使用,但不可以重復(fù)定義。
4. 變量指向新的數(shù)據(jù)只會(huì)影響之后指令的執(zhí)行效果。
5. 保留字:goto、const。(無(wú)意義)
Ⅱ、標(biāo)識(shí)符
1. 標(biāo)識(shí)符是用來(lái)給類(lèi)、方法、變量等命名用的。
命名規(guī)則:1)由字母、中文(不推薦)、數(shù)字、下劃線(xiàn) _、$組成;2)不能以數(shù)字開(kāi)頭;3)不能是關(guān)鍵字。
2. 注意:大小寫(xiě)如:demo和Demo
3. 駝峰命名法:每個(gè)單詞第一個(gè)字母大寫(xiě),例:ageOfBaby
4. 潛規(guī)則”:類(lèi)名:大寫(xiě)開(kāi)頭;變量名、方法名:小寫(xiě)開(kāi)頭。
Ⅲ、變量類(lèi)型、初始化
1. 定義一個(gè)變量的格式:變量類(lèi)型 變量名=初始值;
2. 局部變量使用前必須賦給初值。聲明時(shí)賦值或者使用前賦值都可以
3. 整數(shù)常量默認(rèn)是int類(lèi)型,小數(shù)常量默認(rèn)是double類(lèi)型。
選用數(shù)據(jù)類(lèi)型的時(shí)候在考慮到數(shù)據(jù)的可能范圍之后,選擇最小范圍的類(lèi)型,這樣節(jié)省資源。
Ⅳ、類(lèi)型轉(zhuǎn)換
1. byte b=3;int i=b;//隱式類(lèi)型轉(zhuǎn)換
其實(shí)并沒(méi)有把這個(gè)東西從這種類(lèi)型"轉(zhuǎn)換"成另一種類(lèi)型,它只是根據(jù)
原來(lái)的內(nèi)容創(chuàng)建一個(gè)新東西。
另:byte b = (byte)i;//顯式類(lèi)型轉(zhuǎn)換
2. 不能從 double 轉(zhuǎn)換為 float。小數(shù)默認(rèn)是double
3. int i2 = (int)d1;//顯式類(lèi)型轉(zhuǎn)換,會(huì)丟失小數(shù)部分
4. 大范圍”=“小范圍”:隱式轉(zhuǎn)換
“小范圍”=“大范圍”:顯式轉(zhuǎn)換,編譯器擔(dān)保不出事
都是整數(shù)參與乘除運(yùn)算,結(jié)果還是整數(shù)。整數(shù)常量參與乘除計(jì)算一般加f聲明為小數(shù)類(lèi)型,避免精度損失。
5. int轉(zhuǎn)換為String:Integer.toString(i);String轉(zhuǎn)換為int:Integer.parseInt("33")。顯式類(lèi)型轉(zhuǎn)換僅限整數(shù)、小數(shù)類(lèi)
型之內(nèi)。
總結(jié):① 大范圍 =》 小范圍 隱式轉(zhuǎn)換 小范圍 =》 大范圍 顯式轉(zhuǎn)換
② 注釋?zhuān)阂@示一個(gè) ,前面加一個(gè) 即可;
要顯示兩個(gè) (即 \\) ,前面加兩個(gè) \\,而兩個(gè)分開(kāi)的 (即 ) ,須在各個(gè)前加 \\ ;
要顯示三個(gè)以上 (即 ……),在各個(gè)前面加一個(gè) 即可。
Ⅴ、賦值運(yùn)算符
1. 基本數(shù)據(jù)類(lèi)型是復(fù)制傳遞
2. 通過(guò)中間變量來(lái)交換兩個(gè)int變量的值。
第三章、游戲引擎
1、網(wǎng)頁(yè)、Swing、Android、游戲引擎等幾乎所有圖形環(huán)境中,都是以屏幕左上角為原點(diǎn)坐標(biāo),x向右為正向,y向下為正向。
像素:圖形內(nèi)容都是由一個(gè)個(gè)的像素點(diǎn)組成的。
2、imgName為初始顯示圖片的文件名(必須放在src的Images包下)。也可以調(diào)用void createImage(int num)創(chuàng)建一個(gè)什么都不顯示的圖片。
3、比較運(yùn)算:① 借助中間變量temp; ② 運(yùn)算法
4、repeat表示是播放一次,還是重復(fù)播放。playSpriteAnimate是啟動(dòng)動(dòng)畫(huà)之后就結(jié)束,不會(huì)等動(dòng)畫(huà)播完。
5、Dimension getSpriteSize(int spriteNum) 獲得精靈的尺寸
6、生成精靈、網(wǎng)址: http://www.spriters-resource.com
剪切工具:SpriteSheets(需要.Net Framework)。
生成的圖片必須是png格式的。
7、程序打包:① 把bin和兩個(gè)jar拷貝到單獨(dú)的文件夾下;
② 創(chuàng)建一個(gè).bat文件,內(nèi)容是 start jrebinjavaw.exe -cp .bin -Djava.ext.dirs=. Main1。Main1代表入口類(lèi),如果有報(bào)名則要寫(xiě)全名。
③ 壓縮一下,發(fā)給對(duì)方,解壓雙擊“bat”文件即可
第四章、邏輯運(yùn)算符和if語(yǔ)句
1、苦記優(yōu)先級(jí)表,不如直接用括號(hào)區(qū)別優(yōu)先級(jí),提高代碼可讀性。
2、短路運(yùn)算:對(duì)于&&,一旦遇到左邊的為false,那么結(jié)果一定是false了
對(duì)于||,一旦遇到左邊的為true,那么結(jié)果一定是true了
因此就不計(jì)算右邊的表達(dá)式了。
另:非運(yùn)算(?。瑔文窟\(yùn)算,沒(méi)有短路運(yùn)算
第五章、if和switch語(yǔ)句
1、if語(yǔ)句若只有一行代碼,去掉大括號(hào)雖然可行,但不符合代碼規(guī)范,所以不建議去掉大括號(hào)
2、switch只能進(jìn)行離散值的判斷,不能進(jìn)行范圍的判斷;switch只能進(jìn)行常量的比較,不能進(jìn)行變量的比較
3、else可以不用最后的else,建議加上,更加嚴(yán)謹(jǐn)
4、如果匹配了上面的一個(gè)條件,那么即使復(fù)合下面的else if條件,else if也不會(huì)執(zhí)行“先來(lái)后到”
5、三元運(yùn)算符能夠?qū)崿F(xiàn)的,基本if都能實(shí)現(xiàn);if能實(shí)現(xiàn)的,三元運(yùn)算符不見(jiàn)得能夠?qū)崿F(xiàn)。所以基本是“簡(jiǎn)單的判斷然后根據(jù)判斷的boolean結(jié)果進(jìn)行簡(jiǎn)單的賦值”才使用三元運(yùn)算符
6、表達(dá)式可以是byte、short、int、char類(lèi)型。(*)JDK5以后還可以是枚舉類(lèi)型,JDK7以后還可以是String類(lèi)型。
7、break意味著switch的結(jié)束。default相當(dāng)于if的else,當(dāng)所有case都不匹配的時(shí)候,執(zhí)行default
8、多個(gè)switch條件合并的問(wèn)題:當(dāng)多個(gè)case條件的代碼一樣的情況下,可以合并,最后加一個(gè)break;
9、① case語(yǔ)句不能是判斷條件表達(dá)式,也不能是變量,必須得是常量
② 不能有重復(fù)的case常量,但if可以有
③ 每條case語(yǔ)句后必須有一個(gè)break,但default后的可以省略
第六章、for循環(huán)
1、for(初始化;是否繼續(xù)循環(huán)判斷;一次循環(huán)后執(zhí)行的) 這三部分都可以省略,第一部分省略就沒(méi)有初始化,第二部分省略則默認(rèn)為true,第三部分則執(zhí)行后不執(zhí)行什么。
2、循環(huán)嵌套層數(shù)可以更多,但是建議不要超過(guò)兩層。
3、break和continue可以用到for、while、do while這些循環(huán)語(yǔ)句中。區(qū)別是break是終止整個(gè)循環(huán),continue是終止當(dāng)次循環(huán)
4、空格彈跳:這種“一次性觸發(fā)”的動(dòng)作最好用后面的“事件驅(qū)動(dòng)”,否則實(shí)現(xiàn)起來(lái)很麻煩,getPressedKeyCode()只適合于“連續(xù)動(dòng)作”
5、注意變量的范圍(全局還是局部),不同范圍起的作用不同,甚至易引起錯(cuò)誤。
第七章、while、數(shù)組
1、對(duì)于int、double、float等數(shù)組,沒(méi)有賦值的元素被初始化為0;對(duì)于String、Integer等引用類(lèi)型初始化為null。
2、不能動(dòng)態(tài)增加數(shù)組的大小,要用LinkedList、ArrayList等來(lái)增加
第八、九、十
Ⅰ、二維數(shù)組:
① 可以為不定長(zhǎng)數(shù)組
② 交換數(shù)組元素:第i個(gè)和第length-i-1個(gè)交換
Ⅱ、方法:
1、方法就是一堆可以復(fù)用的代碼段。方法執(zhí)行過(guò)程中無(wú)法確定的數(shù)據(jù)以參數(shù)形式傳遞過(guò)來(lái);方法的執(zhí)行結(jié)果以返回值進(jìn)行返回。
2、方法的聲明時(shí)參數(shù)的名字和調(diào)用時(shí)候變量名字沒(méi)有關(guān)系,調(diào)用的時(shí)候甚至可以不傳變量
3、方法中的局部變量不能被調(diào)用的方法訪問(wèn),如果真要訪問(wèn)只能通過(guò)參數(shù)傳值,并且只是相當(dāng)于變量賦值,方法內(nèi)部對(duì)參數(shù)的賦值不會(huì)影響調(diào)用者。
Ⅲ、重載(OverLoad):① 在同一個(gè)類(lèi)中,允許存在一個(gè)以上的同名方法,只要其參數(shù)個(gè)數(shù)或者參數(shù)類(lèi)型不同即可。返回值是否一樣無(wú)關(guān)和參數(shù)名是否一樣無(wú)關(guān)。
② 方法重載可以實(shí)現(xiàn)“方法參數(shù)默認(rèn)值的效果”
③ 可變參數(shù)前面還可以有其他參數(shù),只要保證可變參數(shù)是最后一個(gè)就可以(只能有一個(gè)可變長(zhǎng)度參數(shù))
第十一章、面向?qū)ο蠡A(chǔ)
1、面向?qū)ο蟛皇翘娲嫦蜻^(guò)程的,宏觀是面向?qū)ο?,微觀仍然是面向過(guò)程
2、一個(gè)java文件中只能定義一個(gè)public的class,且文件名一般和public類(lèi)一樣。
3、new出的每個(gè)對(duì)象都是一個(gè)單獨(dú)的實(shí)例,兩個(gè)對(duì)象之間的成員變量是獨(dú)立的兩份。
4、局部變量必須初始化,成員變量聲明時(shí)默認(rèn)初始化,基本數(shù)值類(lèi)型默認(rèn)初始值為0、false,String等非基本類(lèi)型初始化為null。
5、當(dāng)成員變量和局部變量(函數(shù)參數(shù)也可以看做局部變量)重名的時(shí)候,被看做局部變量,因此為了避免混亂,建議訪問(wèn)類(lèi)成員變量的時(shí)候加上“this.”, 在類(lèi)內(nèi)部this代表當(dāng)前對(duì)象。this.也可以調(diào)用當(dāng)前類(lèi)的成員方法。
6、棧內(nèi)存(成員變量):自動(dòng)釋放
堆內(nèi)存(局部變量):不會(huì)自動(dòng)釋放(System.gc回收)
7、new Person().sayHello();創(chuàng)建一個(gè)匿名對(duì)象,然后調(diào)用。
8、public成員可以被類(lèi)內(nèi)部或者外部訪問(wèn),private成員只能被類(lèi)內(nèi)部訪問(wèn)(通過(guò)set、get方法訪問(wèn))。這樣可以保護(hù)不希望外接調(diào)用的內(nèi)部成員(Member,包含字段Field/變量、方法)不被外界訪問(wèn)。封裝數(shù)據(jù)、暴露行為。
9、構(gòu)造函數(shù)是創(chuàng)建類(lèi)對(duì)象,并且在創(chuàng)建完成前對(duì)類(lèi)進(jìn)行初始化的特殊函數(shù)。如果定義類(lèi)時(shí)沒(méi)有聲明構(gòu)造函數(shù),默認(rèn)會(huì)給出一個(gè)無(wú)參構(gòu)造函數(shù),如果定義了任意一個(gè)構(gòu)造函數(shù),將不會(huì)提供默認(rèn)的無(wú)參構(gòu)造函數(shù)。
10、① 方法名必須和類(lèi)名一致 ② 沒(méi)有返回值類(lèi)型
11、JavaBean的規(guī)則:
1)必須有無(wú)參構(gòu)造函數(shù);
2)字段不能是public;
3)類(lèi)的字段必須通過(guò)get和set方法來(lái)訪問(wèn)。 set***、get***。只有g(shù)et沒(méi)有set則是“只讀”
4) boolean類(lèi)型屬性名避免使用 “is” 開(kāi)頭的名稱(chēng)
12、包(package):① 通過(guò)package定義在頁(yè)面最頂部; 避免類(lèi)名重復(fù)的問(wèn)題。
② 在磁盤(pán)上的保存路徑和package一致,可以單級(jí)、可以多級(jí)。
③ 包名小寫(xiě)
④ “公司域名反著寫(xiě).產(chǎn)品名.模塊名”:com.rupeng.crm.user、com.sun.media.sound
13、靜態(tài)static:
① static變量不需要new就可以直接通過(guò)類(lèi)名調(diào)用。static變量是共享一塊兒內(nèi)存空間,非static變量則是各對(duì)象隔離的。
② static 方法中無(wú)法使用this關(guān)鍵字,因?yàn)閟tatic獨(dú)立于對(duì)象存在,不是任何人的唯一。
③ static成員中只能訪問(wèn)static成員,不能直接訪問(wèn)非static成員。非static成員可以訪問(wèn)static成員。
④ 靜態(tài)成員只會(huì)初始化一次。
14、單例模式:
① 類(lèi)在系統(tǒng)中只能有一個(gè)對(duì)象
② 構(gòu)造函數(shù)聲明為private,這樣避免外界訪問(wèn)
第十二章、面向?qū)ο笊钊?/p>
1、枚舉:限定一個(gè)數(shù)據(jù)的可選值范圍,比如“方向”。
2、枚舉的原理:構(gòu)造函數(shù)設(shè)置為private,把幾個(gè)對(duì)象設(shè)置為public static fina實(shí)例。
3、類(lèi)的靜態(tài)代碼塊:靜態(tài)代碼塊在類(lèi)第一次被使用的時(shí)候執(zhí)行一次,在構(gòu)造函數(shù)執(zhí)行之前執(zhí)行。只要一旦開(kāi)始“接觸一個(gè)類(lèi)”,靜態(tài)成員、static代碼塊就會(huì)被執(zhí)行。
4、繼承(inherit):① Java中一個(gè)類(lèi)可以“繼承”自其他類(lèi)。
② 子類(lèi)會(huì)從父類(lèi)繼承所有非private成員。子類(lèi)還可以有子類(lèi)。
③ Java中一個(gè)類(lèi)只能有一個(gè)父類(lèi)(單繼承),如果沒(méi)指定父類(lèi),則Java內(nèi)置的Object為父類(lèi)。
5、繼承中的構(gòu)造函數(shù)調(diào)用順序:① 子類(lèi)的構(gòu)造方法默認(rèn)都去訪問(wèn)了父類(lèi)的無(wú)參構(gòu)造方法:在子類(lèi)中的構(gòu)造方法中都有一行默認(rèn)語(yǔ)句:super()
② 先執(zhí)行父類(lèi)的構(gòu)造函數(shù)把父類(lèi)初始化完成,再初始化子類(lèi)的。
③ 可以通過(guò)super(參數(shù))去訪問(wèn)父類(lèi)中的有參構(gòu)造函數(shù)??梢酝ㄟ^(guò)this(參數(shù)...)去訪問(wèn)本類(lèi)中的其他構(gòu)造函數(shù)。
④ 如果父類(lèi)沒(méi)有無(wú)參構(gòu)造函數(shù),那么子類(lèi)必須顯式調(diào)用父類(lèi)的其他的構(gòu)造函數(shù)。
6、public/private/protected:
① private成員無(wú)法被子類(lèi)訪問(wèn),子類(lèi)只能通過(guò)父類(lèi)的非private方法“間接”訪問(wèn)父類(lèi)的private成員。這樣保證了父類(lèi)private成員的安全性。
② 繼承是“模子”的集成,數(shù)據(jù)不會(huì)繼承。
③ protected成員只能被自己以及子類(lèi)(直接或者間接)以及兄弟(同package包中)訪問(wèn),無(wú)法被“外姓人”訪問(wèn)。
另:default(什么都不寫(xiě)):同一個(gè)package包中可以訪問(wèn)。
第十三章、多態(tài)
1、多態(tài):父類(lèi)和子類(lèi)中的方法的參數(shù)個(gè)數(shù)和類(lèi)型都相同,只是實(shí)現(xiàn)體不同,父類(lèi)(基類(lèi))類(lèi)型變量指向子類(lèi)類(lèi)型對(duì)象,并調(diào)用子類(lèi)類(lèi)型對(duì)象的方法進(jìn)行實(shí)現(xiàn)的現(xiàn)象。
另:① 父類(lèi)類(lèi)型的變量可以指向子類(lèi)的對(duì)象,但子類(lèi)類(lèi)型的變量不可以指向父類(lèi)。
② 可以調(diào)用哪些方法由變量的類(lèi)型決定
2、類(lèi)型轉(zhuǎn)換:
()類(lèi)型轉(zhuǎn)換可以把“以父類(lèi)類(lèi)型角度觀察的對(duì)象的實(shí)例”重新以“子類(lèi)類(lèi)型角度觀察”。(顯式類(lèi)型轉(zhuǎn)換/強(qiáng)制類(lèi)型轉(zhuǎn)換)如:Chinese zgr5 = (Chinese)dqr1;(dqr1是父類(lèi)類(lèi)型)
3在父類(lèi)方法中調(diào)用虛方法,指向的是子類(lèi)對(duì)象,執(zhí)行的也是子類(lèi)對(duì)象的方法
4、如果父類(lèi)中的某些方法不希望被子類(lèi)Override,比如kill,那么標(biāo)記為final即可。
好處:① 安全,可以保證父類(lèi)定義的行為的執(zhí)行(必須“被殺死”);
② 效率高,避免了查詢(xún)虛方法表(*)。
另:如果某些類(lèi)不希望被繼承,類(lèi)也可以聲明為final。
final 類(lèi)的好處主要是安全。String類(lèi)就是final
5.抽象類(lèi):Ⅰ、① 抽象方法沒(méi)有方法體;② 一旦類(lèi)中定義了抽象方法,類(lèi)必須被修飾為抽象;
③ 抽象類(lèi)無(wú)法實(shí)例化(new)。
Ⅱ、抽象類(lèi)的抽象方法主要用來(lái)限制子類(lèi)“必須實(shí)現(xiàn)這些抽象方法”;子類(lèi)也可以不實(shí)現(xiàn),那么子類(lèi)也要是抽象類(lèi),由子類(lèi)的子類(lèi)……去實(shí)現(xiàn)。
6、調(diào)試:如果修改了類(lèi)結(jié)構(gòu)、加了方法、改了方法、改了簽名等就要重啟
第十四章、游戲引擎封裝
1、虛方法定義“能干什么”,子類(lèi)中的方法定義具體“干什么”。
2、public GameText(){this("");//調(diào)用重載的構(gòu)造函數(shù)}
3、GameText[] txts = new GameText[words.length];//只是new了一個(gè)大小為5的txts數(shù)組,并沒(méi)有元素,元素需要另外賦值
4、for(GameText text:txts){text.moveLeft();}//增強(qiáng)for循環(huán)
5、增強(qiáng)for循環(huán)只適用于讀取(使用),不能賦值
6、數(shù)組的每個(gè)元素的默認(rèn)值,int=0,boolean=false,String =null, 類(lèi)數(shù)組的每個(gè)元素的默認(rèn)值都是null
第十五章、匿名類(lèi)和接口
1、匿名類(lèi)格式:new 類(lèi)名() { };//類(lèi)體
這樣就是相當(dāng)于聲明了一個(gè)這類(lèi)的子類(lèi),然后并且創(chuàng)建這個(gè)類(lèi)的對(duì)象。注意:不是創(chuàng)建這個(gè)父類(lèi)的對(duì)象。
2、System.out.println(d2.getClass());//d2指向的對(duì)象是Test1$1 (編譯器自動(dòng)生成的)類(lèi)型
3、類(lèi)中this指的是匿名內(nèi)部類(lèi),如果要想指外部的對(duì)象,要用“類(lèi)名.this”
4、接口:Ⅰ、① 是一種用來(lái)聲明“能力”的類(lèi)型,不提供具體實(shí)現(xiàn)
② 不提供實(shí)現(xiàn)方法,連{}都不能有。
③ 接口無(wú)法實(shí)例化,只能被類(lèi)“實(shí)現(xiàn)”(implements)
Ⅱ、① 既可以使用接口類(lèi)型變量又可以使用類(lèi)類(lèi)型變量調(diào)用speak
② 接口的意義是定義“做什么”,類(lèi)定義“怎么做”
③ 接口中只能聲明static 成員變量,不能聲明普通成員變量。因?yàn)閟tatic 可以被外界用,一個(gè)沒(méi)有實(shí)現(xiàn)代碼的接口中聲明普通成員變量沒(méi)意義。而且必須要是public。
Ⅲ、① 接口中可以定義多個(gè)方法,也可以不定義任何方法(* 標(biāo)識(shí)接口)。
② 接口只是“能力”不是“實(shí)現(xiàn)”,因此不能也必要定義構(gòu)造函數(shù)。
③ 類(lèi)只能有一個(gè)父類(lèi),類(lèi)可以實(shí)現(xiàn)多個(gè)接口。
④ 接口可以繼承其他接口:extends。 接口也有多態(tài)、類(lèi)型轉(zhuǎn)換。
Ⅳ、不能給values參數(shù)傳遞int[],但是可以傳遞Integer[]
第十六章、補(bǔ)充知識(shí)
1、java中==就是用來(lái)比較是否指向同一個(gè)對(duì)象,如果要進(jìn)行內(nèi)容的比較,則需要提供equals方法或者實(shí)現(xiàn)Comparable接口。
2、char其實(shí)也是一個(gè)數(shù)字
3、java字符串比較方法:
使用String.compareTo方法:
compareTo()的返回值是int,它是先比較對(duì)應(yīng)字符的大小(ASC||碼順序)
①、如果字符串相等返回值0
②、如果第一個(gè)字符和參數(shù)的第一個(gè)字符不等,結(jié)束比較,返回它們之間的差值(ASC||碼值) //第一個(gè)字符出結(jié)果了就不較后面的了
(負(fù)值前字符串的值小于后字符串,正值前字符串大于后字符串)
③、 如果第一個(gè)字符和參數(shù)的第一個(gè)字符相等,則以第二個(gè)字符和參數(shù)的第二個(gè)字符做比較,
依次類(lèi)推。
④、如果比較完一個(gè),另一個(gè)字符串還剩一點(diǎn),則返回this.length()-anotherString.length()
4、在內(nèi)存中創(chuàng)建一個(gè)字符串對(duì)象,內(nèi)容是“abc”,把s1指向這個(gè)字符串對(duì)象
發(fā)現(xiàn)已經(jīng)有了一個(gè)“abc”字符串對(duì)象了,因此把s2直接指向之前的“abc”
網(wǎng)站欄目:Java語(yǔ)言基礎(chǔ)、學(xué)習(xí)筆記
分享網(wǎng)址:http://www.dlmjj.cn/article/cjghcc.html