教程揭秘 | 動(dòng)力節(jié)點(diǎn)內(nèi)部Java零基礎(chǔ)教學(xué)文檔第一篇:JavaSE(3)
接上期后續(xù)
本期繼續(xù)分享尚未結(jié)束的JavaSE章節(jié)
JavaSE屬于初入門階段,內(nèi)容很多~
但很基礎(chǔ),
大家需保持耐心,慢慢的學(xué)~
爭(zhēng)取你們學(xué)習(xí)的速度!
跟上我更新的速度哦~

今日新篇章
流程控制語句
【主要內(nèi)容】
1.?if單選結(jié)構(gòu)
2.?if雙選結(jié)構(gòu)
3.?if多選結(jié)構(gòu)
4.?switch選擇結(jié)構(gòu)
5.?for循環(huán)結(jié)構(gòu)
6.?while循環(huán)結(jié)構(gòu)
7.?do-while循環(huán)結(jié)構(gòu)
8.?break和continue關(guān)鍵字
9.?嵌套循環(huán)
10.?帶標(biāo)簽的break和continue
11.?方法定義和調(diào)用
12.?方法重載
【學(xué)習(xí)目標(biāo)】

1.?選擇結(jié)構(gòu)
Java程序的執(zhí)行,一般分為三種執(zhí)行方式:順序執(zhí)行、選擇執(zhí)行和循環(huán)執(zhí)行。
1.1?if選擇結(jié)構(gòu)
1.1.1??if單選結(jié)構(gòu)
【語法結(jié)構(gòu)】
if(條件表達(dá)式) {
?// 當(dāng)“條件表達(dá)式”的結(jié)果為true時(shí),則執(zhí)行此處的代碼;
}
【工作原理】
如果條件為真,則執(zhí)行if中的語句,然后在執(zhí)行if條件之后的語句;反之則不執(zhí)行if中的語句,直接執(zhí)行if之外的語句。
?

1、?根據(jù)年齡判斷是否已經(jīng)成年,年齡大于18表示成年。
2、?判斷一個(gè)數(shù)是否在5(包含)到10(包含)之間。
1.1.2??if雙選結(jié)構(gòu)?
【語法結(jié)構(gòu)】
if(條件表達(dá)式) {
// 當(dāng)“條件表達(dá)式”的結(jié)果為true時(shí),則執(zhí)行此處的代碼;
}?else {
// 當(dāng)“條件表達(dá)式”的結(jié)果為false時(shí),則執(zhí)行此處的代碼;
}
【工作原理】
如果“條件表達(dá)式”的結(jié)果為true,則執(zhí)行if大括號(hào)中的代碼;如果“條件表達(dá)式”的結(jié)果為false,則執(zhí)行else大括號(hào)中的代碼。
?

【隨堂練習(xí)】
1、?模擬用戶登錄操作(用戶名和密碼都用字符串),需要判斷出登錄成功和登錄失敗的情況。
???注意:判斷字符串是否相同,不能使用==,而是需要使用equals方法。
1.1.3??if多選結(jié)構(gòu)
【語法結(jié)構(gòu)】

【工作原理】

【隨堂練習(xí)】
1、?判斷一個(gè)學(xué)生的成績(jī),如果90(包含)~100(包含)為優(yōu)秀,70(包含)~90為良好,60(包含)~70為及格,60分以下輸出不及格。
2、?輸入一個(gè)整數(shù)month代表月份,根據(jù)月份輸出對(duì)應(yīng)的季節(jié)。
春季:3、4、5 夏季:6、7、8 秋季:9、10、11 冬季:12、1、2
3、?錄入一個(gè)年份,判斷其是否為閏年。
閏年的計(jì)算方法:年數(shù)能被4整除,并且不能被100整除;或者能被400整除的整數(shù)年份。
4、?輸入時(shí)(hour)、分(minute)、秒(second)的一個(gè)具體時(shí)間,要求打印出它的下一秒出來(一天24小時(shí))。
例如輸入的是23時(shí)59分59秒,則輸出00:00:00;例如輸入17時(shí)09分59秒,則輸出17:10:00。

1.1.4??if選擇結(jié)構(gòu)總結(jié)
1、?如果if選擇結(jié)構(gòu)只需執(zhí)行一條語句時(shí),那么可以省略{};如果需要執(zhí)行多條語句,那么就是不能省略{}。為了提高代碼的易讀性,建議不要省略{}。
2、?{}中的代碼語句也稱為代碼塊,在代碼塊定義的常量或變量的作用域僅限于代碼塊中,在代碼塊之外不能被使用。
3、?能用if多選擇結(jié)構(gòu)就不要用if單選擇結(jié)構(gòu),因?yàn)閕f多選擇結(jié)構(gòu)的效率要高于if單選擇結(jié)構(gòu)。
4、?在if選擇結(jié)構(gòu)中還可以嵌套別的選擇結(jié)構(gòu)或循環(huán)結(jié)構(gòu)。
1.2??switch選擇結(jié)構(gòu)
1.2.1??switch選擇結(jié)構(gòu)
使用switch語句來選擇要執(zhí)行的代碼塊,與if條件分支語句比較類似。
【語法結(jié)構(gòu)】

【工作原理】
switch語句會(huì)根據(jù)表達(dá)式的值從相匹配的case標(biāo)簽處開始執(zhí)行,一直執(zhí)行到break語句處或者是switch語句的末尾。與任一case值不匹配,則進(jìn)入default語句(如果存在default語句的情況)。
【注意事項(xiàng)】
1、?switch()中的數(shù)據(jù)類型只能為:byte、short、int、char、String(JDK7)和枚舉(后面會(huì)學(xué)習(xí))。
2、?case后面必須是常量,并且常量的類型應(yīng)該和switch()中的數(shù)據(jù)類型保持一致。
并且不允許有重復(fù)的case值。
3、?break用于跳出switch語句,根據(jù)需求我們我們可以省略break,
如果沒有break,?一旦進(jìn)入case,導(dǎo)致后面的所有case都能進(jìn)入,?直到遇到break或switch結(jié)束。
4、?default可以省略,但是最好不要省略,除非case能匹配所有的可能性。
???case和default的是無序的,不過default只能最后執(zhí)行或不執(zhí)行。
【隨堂練習(xí)】
1、?輸入一個(gè)整數(shù),對(duì)應(yīng)的顯示出星期幾,例如:?輸入“1”,則輸出為“星期一”?。
2、?接收一個(gè)人的成績(jī),如果成績(jī)?yōu)??90(包含)到100(包含)輸出優(yōu)秀,70(包含)到90輸出良好,60(包含)到70輸出及格,60分以下輸出不及格。
3、?查詢水果的價(jià)格,根據(jù)輸入水果(fruit)的名字,輸出對(duì)應(yīng)的水果的價(jià)格,例如蘋果6塊/斤,香蕉3元/斤,榴蓮20元/斤,西瓜0.8元/斤。
1.2.2??switch和if的區(qū)別
switch:建議判斷固定值的時(shí)候用。
if:建議判斷區(qū)間或范圍的時(shí)候用,對(duì)運(yùn)算結(jié)果是boolean類型的表達(dá)式進(jìn)行判斷。 ??
注意:用switch能做的,用if都能做,但反過來則不行。
2.?循環(huán)結(jié)構(gòu)
2.1??for循環(huán)結(jié)構(gòu)
【語法格式】
for(循環(huán)初始化表達(dá)式; 循環(huán)條件表達(dá)式; 循環(huán)后的操作表達(dá)式) {
// 循環(huán)體
}
重點(diǎn):掌握for循環(huán)的執(zhí)行順序。初始化表達(dá)式最先執(zhí)行,并且在循環(huán)過程中只執(zhí)行一次。
【隨堂練習(xí)】
1、?輸出0(包含)到100(包含)之間的數(shù),分別以遞增和遞減的方式實(shí)現(xiàn);
2、?輸出1到100之間的奇數(shù)和偶數(shù);
3、?輸入一個(gè)正整數(shù)n,計(jì)算1+2+3+…+n的和;
4、?輸入一個(gè)正整數(shù)n,計(jì)算1-2+3-4+5-6+…-(n-1)+n的和;
5、?輸出1到1000之間既能被5整除又能被3整除的數(shù),并且每行輸出5個(gè)。
6、?求100到999之間的水仙花數(shù)。水仙花數(shù)的每個(gè)位上的數(shù)字的3次冪之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
2.2??while循環(huán)結(jié)構(gòu)
【語法格式】
while (循環(huán)條件表達(dá)式) {
// 循環(huán)體
}
while循環(huán)和for循環(huán)比較類似,while循環(huán)會(huì)在循環(huán)條件表達(dá)式為真的時(shí)循環(huán)執(zhí)行代碼塊。
2.3??do-while循環(huán)結(jié)構(gòu)
【語法結(jié)構(gòu)】
do {
// 循環(huán)體
} while(循環(huán)條件表達(dá)式)?;
先執(zhí)行循環(huán)體,然后判斷循環(huán)條件表達(dá)式,do-while循環(huán)循環(huán)體至少執(zhí)行一次。
2.4??break和continue詳解
2.4.1??break關(guān)鍵字
在任何循環(huán)語句的主體部分,均可用break控制循環(huán)的流程。break用于強(qiáng)行退出循環(huán),不執(zhí)行循環(huán)中剩余的語句。
適用于switch語句和循環(huán)結(jié)構(gòu)中。當(dāng)break作用于for循環(huán)上, “循環(huán)后的操作表達(dá)式”也不會(huì)執(zhí)行。
注意:break之后不允許書寫別的代碼語句,因?yàn)閎reak會(huì)跳出當(dāng)前循環(huán)或switch,那么break之后的代碼永遠(yuǎn)不會(huì)執(zhí)行。
2.4.2??continue關(guān)鍵字
continue?語句用在循環(huán)語句體中,用于終止某次循環(huán)過程,即跳過循環(huán)體中尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。
Continue關(guān)鍵字只適用于循環(huán)結(jié)構(gòu)中。
2.4.3??帶標(biāo)簽的break和continue【了解】
goto關(guān)鍵字很早就在程序設(shè)計(jì)語言中出現(xiàn)。盡管goto仍是Java的一個(gè)保留字,但并未在語言中得到正式使用(Java沒有g(shù)oto)。然而,在break和continue這兩個(gè)關(guān)鍵字的身上,我們?nèi)匀荒芸闯鲆恍ゞoto的影子,那就是帶標(biāo)簽的break和continue。
“標(biāo)簽”是指后面跟一個(gè)冒號(hào)的標(biāo)識(shí)符,例如:“l(fā)abel:”。對(duì)Java來說唯一用到標(biāo)簽的地方是在循環(huán)語句之前。而在循環(huán)之前設(shè)置標(biāo)簽的唯一理由是:我們希望在其中嵌套另一個(gè)循環(huán),由于break和continue關(guān)鍵字通常只中斷當(dāng)前循環(huán),但若隨同標(biāo)簽使用,它們就會(huì)中斷到存在標(biāo)簽的地方。
【示例】
outer: for(int?i?= 0; i?< 4; i++) {
for(int?j?= 0; j?< 5; j++) {
if?(j?== 1) {
break?outer;
}
}
}
【隨堂練習(xí)】
1、?使用continue實(shí)現(xiàn)輸出1到100之間能被5整除的數(shù)。
2、?韓信點(diǎn)兵,三人一組余兩人,五人一組余三人,七人一組余四人,請(qǐng)問最少需要多少士兵。
3、[難]輸入一個(gè)任意整數(shù),判斷它是否為質(zhì)數(shù)。如果整數(shù)為7,則輸出“7是質(zhì)數(shù)”,如果整數(shù)為9,則輸出‘9不是質(zhì)數(shù)’。質(zhì)數(shù):除了1和它本身之外,不能被其他數(shù)整除的數(shù)稱之為質(zhì)數(shù)。
實(shí)現(xiàn)步驟:
1)通過Scanner獲取一個(gè)正整數(shù), 假設(shè)正整數(shù)為num。
??2)通過循環(huán)獲得[2, num)之間所有的整數(shù),假設(shè)循環(huán)變量為i。
3)在循環(huán)體內(nèi)部判斷num是否能被i整除,也就是判斷num是否為質(zhì)數(shù)。
實(shí)現(xiàn)思路:采用假設(shè)法來實(shí)現(xiàn)。
a)在循環(huán)之前,先假設(shè)num是一個(gè)質(zhì)數(shù),設(shè)置flag標(biāo)記的值為true
??????b)在循環(huán)體中,如果num%i==0,則推翻假設(shè),設(shè)置flag標(biāo)記的值為false,并跳出循環(huán)
c)在循環(huán)之后,如果flag值依舊為true,則證明是一個(gè)質(zhì)數(shù),否則證明不是一個(gè)質(zhì)數(shù)。
實(shí)現(xiàn)代碼:

2.5??while與for的區(qū)別
for和while的區(qū)別:
for循環(huán)能做的事情while循環(huán)都可以實(shí)現(xiàn),使用循環(huán)的時(shí)候for和while都可以選擇。
建議以下條件使用while循環(huán):
1.循環(huán)結(jié)束后循環(huán)變量還需要參與運(yùn)算,那么建議使用while循。
2.不確定循環(huán)次數(shù)的時(shí)候,建議使用while循環(huán)。
2.6??嵌套循環(huán)
在一個(gè)循環(huán)語句內(nèi)部再嵌套一循環(huán)或多個(gè)循環(huán),稱為嵌套循環(huán)。while、do-while與for循環(huán)可以任意嵌套多層。
多重循環(huán)執(zhí)行過程:外層循環(huán)變量變化一次,內(nèi)層循環(huán)變量要變化一遍。
【隨堂練習(xí)】
1、?在控制臺(tái)先打印矩形,然后再打印平行四邊形,再然后打印等腰三角形。

2、?使用嵌套循環(huán)實(shí)現(xiàn)九九乘法表(注意循環(huán)變量的初始值)。

3、?[難]輸入一個(gè)正整數(shù),然后把該正整數(shù)轉(zhuǎn)化為二進(jìn)制。
難點(diǎn)1:把正整數(shù)轉(zhuǎn)化為二進(jìn)制,假設(shè)輸入的正整數(shù)為num=20
第一趟:bit = num % 2; num /= 2; ?--> num = 10, ?bit = 0 ??
????第二趟:bit = num % 2; num /= 2; ?--> num = 5, ??bit = 0
????第三趟:bit = num % 2; num /= 2; ?--> num = 2, ??bit = 1
??第四趟:bit = num % 2; num /= 2; ?--> num = 1, ??bit = 0
????第五趟:bit = num % 2; num /= 2; ?--> num = 0, ??bit = 1
循環(huán)需要執(zhí)行多少次呢???不確定,所以采用死循環(huán)。
什么時(shí)候跳出死循環(huán)呢???當(dāng)num的值為0時(shí)跳出循環(huán)。
難點(diǎn)2:拼接二進(jìn)制位,使用String類型的變量保存二進(jìn)制
我們定義一個(gè)字符串類型的變量bitStr,并且設(shè)置初始值為空字符串,例如:String bitStr = "";
第一趟:int bit = 1,bitStr = bit + bitStr; --> bitStr = "1"
第二趟:int bit = 1,bitStr = bit + bitStr; --> bitStr = "11"
????第三趟:int bit = 1,bitStr = bit + bitStr; --> bitStr = "111"
????第四趟:int bit = 0,bitStr = bit + bitStr; --> bitStr = "0111"
????第五趟:int bit = 1,bitStr = bit + bitStr; --> bitStr = "10111"
實(shí)現(xiàn)代碼:

4、[難]搬磚問題:36塊磚,36個(gè)人搬,男搬4塊,女搬3塊,兩個(gè)小孩搬1塊,要求一次搬完,
問需要男、女、小孩各多少人?
思路分析:
條件:男人 + 女人 + 小孩 == 36 && 男人搬磚數(shù)量 + 女人搬磚數(shù)量 + 小孩搬磚數(shù)量 == 36
????我們只需列舉出男人、女人和小孩的人數(shù)區(qū)間范圍,然后計(jì)算機(jī)依次去判斷匹配即可!
? ?男人的取值范圍???[0, 9]
女人的取值范圍???[0, 12]
小孩的取值范圍???[0, 36]

3.?方法(method)
3.1?什么是方法
方法就是定義在類中的具有特定功能的一段獨(dú)立小程序,用來完成某個(gè)功能操作。在某些語言中方法也稱為函數(shù)或者過程。
特殊的main方法,該方法是程序的入口,由虛擬機(jī)來調(diào)用執(zhí)行。在日常的開發(fā)中,不可能把程序的所有功能都放到main方法中,我們需要定義其它的方法來完成指定的功能,需要完成該功能時(shí)只需要調(diào)用方法即可。
3.2?方法聲明&調(diào)用
3.2.1?方法聲明格式
[修飾符]?返回值類型?方法名(參數(shù)類型?參數(shù)名1,參數(shù)類型?參數(shù)名2,……) {
// 執(zhí)行語句;
? ???return 返回值;
}
方法格式說明:
1、?修飾符,用于控制方法的訪問權(quán)限(后面的課程會(huì)細(xì)講)。
2、?返回值類型,方法需要返回值的數(shù)據(jù)類型,如無返回值,必須聲明返回值類型為void。
3、?方法名,方法的名字,要求必須符合標(biāo)識(shí)符規(guī)范,并且采用小駝峰命名法則。
4、?形參列表,由參數(shù)類型和參數(shù)名組成,形參可以為任意多個(gè),用于給方法內(nèi)部傳遞數(shù)據(jù)。
5、?執(zhí)行語句,書寫方法需要實(shí)現(xiàn)的功能操作。
6、?返回值,如果定義了返回值類型,那么返回值和返回值類型必須保持一致;如果定義的返回值類型為void,那么需要省略返回值,也就是直接返回return ;即可
注意:當(dāng)方法返回值類型為void時(shí),還可以省略return;
3.2.2?方法調(diào)用格式
方法名(實(shí)際參數(shù)1, 實(shí)際參數(shù)2, ……);
實(shí)際參數(shù)(簡(jiǎn)稱實(shí)參):傳遞給形式參數(shù)的具體數(shù)值,對(duì)應(yīng)著形式參數(shù)(簡(jiǎn)稱形參)。
注意事項(xiàng):
1、?形式參數(shù)(形參)和實(shí)際參數(shù)(實(shí)參)的類型和個(gè)數(shù)必須一一對(duì)應(yīng)。
2、?在方法中只能調(diào)用方法,不可以在方法內(nèi)部再定義方法。
3、?當(dāng)方法有返回值類型時(shí),可以用一個(gè)變量用于接收方法的返回值,該變量的類型必須和方法返回值類型保持一致。
3.3?方法的運(yùn)用
??方法的使用,首先明確兩個(gè)需求:
1、?明確要定義的功能最后的結(jié)果是什么?
2、?明確在定義該功能的過程中,是否需要未知內(nèi)容參與運(yùn)算?
??方法的使用分為兩個(gè)步驟:
1、?定義方法
2、?調(diào)用方法
??定義方法,根據(jù)是否有參數(shù)列表、是否有返回值,可將定義方法分為四類:
1、?無參無返回值方法
2、?無參有返回值方法
3、?有參無返回值方法
4、?有參帶返回值方法
??調(diào)用方法,根據(jù)方法是否有返回值,可將調(diào)用方法分為兩類:
1、?有返回值方法,可以用一個(gè)變量來接收返回值,也可以忽略返回值。
2、?無返回值方法,不能用一個(gè)變量來接收方法的void返回值。
3.3.1?無參無返回值方法
需求:在方法中輸出“hello world”。
分析:不需要參數(shù)和返回值,應(yīng)該選用無參無返回值方法。
【示例】

3.3.2?無參有返回值方法
需求:調(diào)用方法獲得常量3+4的和。
分析:不需要外界傳入?yún)?shù),但是需要返回常量3+4之和。
【示例】

3.3.3?有參無返回值方法
需求:在方法中輸出指定兩個(gè)int變量的和。
分析:需要外界傳入兩個(gè)int類型的參數(shù),但不需要返回值。
【示例】

3.3.4?有參有返回值方法
需求:調(diào)用方法獲得指定兩個(gè)double變量的和。
分析:需要外界傳入兩個(gè)double類型的形參,并返回兩個(gè)double類型形參之和。
【示例】

3.4?方法調(diào)用過程
重點(diǎn)調(diào)用方法的內(nèi)存圖分析,課堂上詳解。
3.5?方法的重載
3.5.1?重載的概念
在同一個(gè)類中,允許存在一個(gè)以上的同名方法,只要它們的參數(shù)個(gè)數(shù)或者參數(shù)類型不同即可。
核心為兩同兩不同:?
-?同一個(gè)類,同一個(gè)方法名
-?參數(shù)列表不同(類型、個(gè)數(shù))
3.5.2?重載的特點(diǎn)
返回值類型不同,不構(gòu)成方法的重載。
形參的名稱不同,不構(gòu)成方法的重載。
方法修飾符不同,不構(gòu)成方法的重載。
注意:重載的方法,實(shí)際是完全不同的方法!只是方法名稱相同而已!
3.5.3?重載的好處
查看JDK文檔中System.out.println()方法,發(fā)現(xiàn)共有10個(gè)println()方法構(gòu)成了“重載關(guān)系”,如下圖:

方法重載通常用來命名一組功能相似的方法,這樣做減少了方法名的數(shù)量,避免了名字空間的污染,對(duì)于程序的可讀性有很大的好處。
?

更多干貨我們下期再說!
記?。∵@只是開始~
