3.3-全棧Java筆記:Java控制語句(下)其他篇

語句塊

語句塊(有時叫做復合語句)西剥,是用花括號擴起的任意數(shù)量的簡單Java語句。塊確定了局部變量的作用域亿汞。塊中的程序代碼瞭空,作為一個整體,是要被一起執(zhí)行的疗我。塊可以被嵌套在另一個塊呢咆畏。不能在兩個嵌套的塊內(nèi)聲明同名的變量。語句塊可以使用外部的變量吴裤!語句塊中定義的變量作用域只限于語句塊旧找。

【示例1】語句塊

public static void main(String[] args) {

int n;

int a;

{

int k;

int n;? //error – can’t redefine n in inner block

}//k is only defined up to here

}

方法

方法就是一段用來完成特定功能的代碼片段,類似于其它語言的函數(shù)麦牺。

方法用于定義該類或該類的實例的行為特征和功能實現(xiàn)钮蛛。方法是類和對象行為特征的抽象。方法很類似于面向過程中的函數(shù)剖膳。面向過程中魏颓,函數(shù)是最基本單位,整個程序由一個個函數(shù)調(diào)用組成吱晒。面向?qū)ο笾械楸ィ麄€程序的基本單位是類,方法是從屬于類和對象仑濒。

聲明格式:

[修飾符1修飾符2? …]返回值類型方法名(形式參數(shù)列表){

Java語句叹话;… … …

}

方法的詳細說明

形式參數(shù):在方法被調(diào)用時用于接收外界輸入的數(shù)據(jù)。

實參:調(diào)用方法時實際傳給方法的數(shù)據(jù)躏精。

返回值:方法在執(zhí)行完畢后返還給調(diào)用它的環(huán)境的數(shù)據(jù)渣刷。

返回值類型:事先約定的返回值的數(shù)據(jù)類型鹦肿,如無返回值矗烛,必須給出返回值類型void。

方法的調(diào)用方式:

對象名.方法名(實參列表)

注意事項

實參的數(shù)目、數(shù)據(jù)類型和次序必須和所調(diào)用方法聲明的形參列表匹配瞭吃。

return語句終止方法的運行并指定要返回的數(shù)據(jù)碌嘀。

Java中進行方法調(diào)用中傳遞參數(shù)時,遵循值傳遞的原則(傳遞的都是數(shù)據(jù)的副本):

基本類型傳遞的是該數(shù)據(jù)值的copy值歪架。

引用類型傳遞的是對對象的引用的copy值股冗,但指定的是同一個對象。

方法的重載(overload)

方法的重載是指一個類中可以定義有相同的名字和蚪,但參數(shù)不同的多個方法止状。調(diào)用時,會根據(jù)不同的參數(shù)表選擇對應的方法攒霹。

新手雷區(qū):

重載的方法怯疤,實際是完全不同的方法!只是名稱相同而已催束!

構(gòu)成方法重載的藥店:

不同的含義:形參類型集峦,形參個數(shù)不同

只有返回值不同不構(gòu)成方法的重載

如:int a(String str){}與void a(String str){}不構(gòu)成方法重載

只有形參的名稱不同,不構(gòu)成方法的重載

如:int a(String str){}與int a(String s){}不構(gòu)成方法重載

【示例2】方法重載

public class Hello {

int a,b;

int add(int a,int b){

return a+b;

}

/*只有返回值不同抠刺,不構(gòu)成方法重載

double add(int a,int b){

return a+b;

}

*/

int add(int a, double b){

return (int)(a+b);

}

int add(double b,int a){

return (int)(a+b);

}

int add(double a, double b){

return (int)(a+b);

}

Hello(){

}

Hello(int _a){

a = _a;

}

Hello(int _a,int _b){

a = _a;

b = _b;

}

public static void main(String[] args){

System.out.println(new Hello().add(3,4.5));

System.out.println(new Hello().add(5.5, 6));

System.out.println(new Hello().add(4,6));

}

}

示例2運行效果圖

遞歸結(jié)構(gòu)

遞歸是一種常見的解決問題的方法塔淤,即把問題逐漸簡單化。遞歸的基本思想就是“自己調(diào)用自己”速妖,一個使用遞歸技術(shù)的方法將會直接或者間接的調(diào)用自己高蜂。

利用遞歸可以用簡單的程序來解決一些復雜的問題。比如:大多數(shù)排序使用的就是遞歸算法罕容。

遞歸結(jié)構(gòu)包括兩個部分:

定義遞歸頭妨马。解答:什么時候不調(diào)用自身方法。如果沒有頭杀赢,將陷入死循環(huán)烘跺。

遞歸體。解答:什么時候需要調(diào)用自身方法脂崔。

【示例3】計算n!

public class A {

static long? factorial(int n){

if(n==1){

return 1;

}else{

return n*factorial(n-1);

}

}

public static void main(String[] args) {

long d1 = System.currentTimeMillis();

System.out.printf("%d階乘的結(jié)果:%s%n",10,factorial(10));

long d2 = System.currentTimeMillis();

System.out.printf("遞歸費時:%s%n",d2-d1);? //耗時:32ms

}

}

示例3運行效果圖

圖1遞歸原理分析圖

遞歸的缺陷

簡單的程序是遞歸的優(yōu)點之一滤淳。但是遞歸調(diào)用會占用大量的系統(tǒng)堆棧,內(nèi)存耗用多砌左,在遞歸調(diào)用層次多時速度要比循環(huán)慢的多脖咐。所以再使用時要慎重。

比如上面的遞歸耗時44ms汇歹。但是用普通循環(huán)的話快得多屁擅,如示例4示

【示例4】使用循環(huán)求n!

public class A{

public static void main(String [] args){

long d3 = System.currentTimeMillis();

int a = 10;

int result = 1;

while (a>1) {

result *= a*(a-1);

a-=2;

}

long d4 = System.currentTimeMillis();

System.out.println(result);

System.out.printf("普通循環(huán)費時:%s%n",d4-d3);? //結(jié)果為0.

}

}

示例4運行效果圖

注意事項

任何可用遞歸解決的問題也能使用迭代解決。當遞歸方法可以更加自然地反映問題产弹,并且易于理解和調(diào)試派歌,并且不強調(diào)效率問題時,可以采用遞歸;

在要求高性能的情況下盡量避免使用遞歸胶果,遞歸調(diào)用既花時間又耗內(nèi)存匾嘱。

「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G早抠,10年Java研發(fā)經(jīng)驗霎烙,曾在神州數(shù)碼、航天院某所研發(fā)中心從事軟件設計及研發(fā)工作蕊连,從小白逐漸做到工程師悬垃、高級工程師、架構(gòu)師甘苍。精通Java平臺軟件開發(fā)盗忱,精通JAVAEE,熟悉各種流行開發(fā)框架羊赵。

筆記包含從淺入深的六大部分:

A-Java入門階段

B-數(shù)據(jù)庫從入門到精通

C-手刃移動前端和Web前端

D-J2EE從了解到實戰(zhàn)

E-Java高級框架精解


F-Linux和Hadoop

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趟佃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子昧捷,更是在濱河造成了極大的恐慌闲昭,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靡挥,死亡現(xiàn)場離奇詭異序矩,居然都是意外死亡,警方通過查閱死者的電腦和手機跋破,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門簸淀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人毒返,你說我怎么就攤上這事租幕。” “怎么了拧簸?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵劲绪,是天一觀的道長。 經(jīng)常有香客問我盆赤,道長贾富,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任牺六,我火速辦了婚禮颤枪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淑际。我一直安慰自己畏纲,他們只是感情好扇住,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霍骄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淡溯。 梳的紋絲不亂的頭發(fā)上读整,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音咱娶,去河邊找鬼米间。 笑死,一個胖子當著我的面吹牛膘侮,可吹牛的內(nèi)容都是我干的屈糊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼琼了,長吁一口氣:“原來是場噩夢啊……” “哼逻锐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雕薪,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤昧诱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后所袁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盏档,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年燥爷,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜈亩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡前翎,死狀恐怖稚配,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情港华,我是刑警寧澤药有,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站苹丸,受9級特大地震影響愤惰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赘理,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一宦言、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧商模,春花似錦蜘澜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽装诡。三九已至,卻和暖如春践盼,著一層夾襖步出監(jiān)牢的瞬間鸦采,已是汗流浹背咕幻。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肄程,地道東北人锣吼。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像蓝厌,于是被迫代替她去往敵國和親吐限。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎部分 基礎部分的順序:基本語法诸典,類相關(guān)的語法崎苗,內(nèi)部類的語法狐粱,繼承相關(guān)的語法胆数,異常的語法,線程的語...
    子非魚_t_閱讀 31,664評論 18 399
  • Java經(jīng)典問題算法大全 /*【程序1】 題目:古典問題:有一對兔子蒋搜,從出生后第3個月起每個月都生一對兔子,小兔子...
    趙宇_阿特奇閱讀 1,875評論 0 2
  • 小編費力收集:給你想要的面試集合 1.C++或Java中的異常處理機制的簡單原理和應用豆挽。 當JAVA程序違反了JA...
    八爺君閱讀 4,596評論 1 114
  • 我們的友誼從夏天開始锰镀,但不會在夏天結(jié)束 ——致那年盛夏認識的她 高三的生活是枯燥乏味...
    Abbylin閱讀 2,161評論 2 1
  • 今天坐滴滴去接女兒咖刃,然后女兒問憾筏,媽媽車車呢嚎杨?我說沒開車來氧腰,女兒問,那怎么回家呢容贝?我說走路吧之景!嘻嘻斤富,因為下班時間段打...
    富足快樂的筱瑩222閱讀 481評論 0 0