Java實用但不確定簡不簡單的教學Day-6 - HackMD

文章推薦指數: 80 %
投票人數:10人

Java實用但不確定簡不簡單的教學Day-6 --- ## 函式/方法在程式語言中,函式(function)是一種可以擁有特定功能的子程式,可以在你的程式中不斷呼叫並執行而當函式執行 ...       Published LinkedwithGitHub Like Bookmark Subscribe Edit #Java實用但不確定簡不簡單的教學Day-6 --- ##函式/方法 在程式語言中,函式(function)是一種可以擁有特定功能的子程式,可以在你的程式中不斷呼叫並執行 而當函式執行完的時候可以回傳新的值 直接看範例可能會比較好懂 ```java publicstaticvoidmain(String[]args){ hello();//在主程式中呼叫了兩次hello hello(); } staticvoidhello(){//定義一個新的函式名字叫做hello //中間的void代表不回傳任何東西 System.out.println("Hello");//印出Hello } ``` 在Java中,我們會把函式稱作方法(method) 所以我們一般會把 ```java publicstaticvoidmain(String[]args){ } ``` 稱作主要方法或是main方法 以下是幾個方法的範例 *方法其實分為類別方法跟實例方法,這裡講的都是類別方法,實例方法之後在物件導向一章會講到,而在類別方法中,前面加上static是必要的 ```java publicstaticvoidmain(String[]args){ inty=5; y=minusTwo(y);//呼叫minusTwo方法 System.out.println(y);//3 Stringstr=hello("Kirito");//呼叫hello方法 System.out.println(str);//HelloKirito System.out.println(calTriangle(10,20));//100 } staticintminusTwo(intx){ //定義一個叫做minusTwo的方法 //中間的int代表此方法會回傳一個int //小括弧中的intx代表他接受一個int參數 returnx-2;//return代表回傳 } staticStringhello(Stringname){ //接受一個String參數 return"Hello"+name; } staticintcalTriangle(intbase,intheight){ //接受兩個int參數 intarea=base*height/2; returnarea;//回傳area,也就是三角形的面積 } ``` 當然也可以在方法中呼叫方法或是自己 ```java staticintaddOneAndTwo(intnum){ returnaddOne(num)+addTwo(num); } staticintaddOne(intnum){ returnnum+1; } staticintaddTwo(intnum){ returnnum+2; } staticintaddOneUntilFive(intnum){//可以猜猜看他是怎麼執行的 if(num>=5){ returnnum; } returnaddOneUntilFive(num+1); } ``` --- ##參數ㄉ傳值或傳址 當你在使用方法並傳入不同型態參數ㄉ同時,你會發現有些很奇特的現象 像是 ```java publicstaticvoidmain(String[]args){ intx=0; addOne(x);//1 System.out.println(x);//0 } staticvoidaddOne(intm){ m++; System.out.println(m); } ``` 或是 ```java publicstaticvoidmain(String[]args){ int[]x={5,2}; addOne(x);//6 System.out.println(x[0]);//6 } staticvoidaddOne(int[]m){ m[0]++; System.out.println(m[0]); } ``` 到底為什麼結果會ㄅ一樣呢? 這時候就要說到 *傳值呼叫(CallByValue) *傳參考呼叫(CallByReference) 我們知道,程式裡的變數其實都是存在記憶體裡面的,而要存取這些變數的值便是透過存取存放這些變數的「位址」 而當我們將參數傳入方法的時候,其實會根據資料型態的不同來決定我們是用哪種方式 方式|說明 ------|----- CallByValue|將變數的值存進新的記憶體位址,所以不會動到原本的變數 CallByReference|直接存取原本記憶體的位置,所以當傳進去的參數變動時,原本的變數也會變 資料型態|方式 ----------|---- 基本資料型態(int、char、double)|CallByValue String字串|CallByValue(雖然他其實在Java裡是物件) 陣列|CallByReference Java物件|CallByReference 其實在C裡面還有一種叫做傳址呼叫,是把變數的位址傳進新的記憶體位址的值,不過Java並沒有這種東西,所以不過多著墨 可以參考[五分鐘快速了解[傳址,傳參考,傳址]](https://ithelp.ithome.com.tw/articles/10198215) --- ##練習題目 其實並沒有什麼OnlineJudge的題目可以寫 不過可以嘗試看看用函式完成下列的題目 *攝氏與華氏溫標轉換(公式:$F=(9*C)/5+32$) *輸出圓形面積 × Signin Email Password Forgotpassword or Byclickingbelow,youagreetoourtermsofservice. SigninviaFacebook SigninviaTwitter SigninviaGitHub SigninviaDropbox NewtoHackMD?Signup



請為這篇文章評分?