您好,登錄后才能下訂單哦!
這篇“Java方法使用實例分析”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java方法使用實例分析”文章吧。
方法就是一個代碼片段. 類似于 C 語言中的 “函數”。作用如下:
1. 是能夠模塊化的組織代碼(當代碼規模比較復雜的時候).
2. 做到代碼被重復使用, 一份代碼可以在多個位置使用.
3. 讓代碼更好理解更簡單.
4. 直接調用現有方法開發, 不必重復造輪子.
定義格式:
示例:寫函數實現求多少項的階乘的和
public class TeseDemo220424 { // 計算某一個數的階乘 public static int func(int n){ int ret = 1; for(int i = 1;i <= n;i++){ ret *= i; } return ret; } // 計算前多少項階乘之和 public static int func1(int k){ int sum = 0; for(int i = 1;i <= k;i++){ sum += func(i); } return sum; } public static void main(String[] args) { // 寫函數來求階乘之和 Scanner myscanner = new Scanner(System.in); System.out.println("請輸入你想要求取前多少項的階乘的和:"); int num = myscanner.nextInt(); int sum = func1(num); System.out.println("前 " + num + "項的階乘和為" + sum); } }
注意:
1. 修飾符:現階段直接使用public static 固定搭配(因為main方法是public static ,所以在里面調用的也只能是靜態的方法)。
2. 返回值類型:如果方法有返回值,返回值類型必須要與返回的實體類型一致,如果沒有返回值,必須寫成void。
3. 方法名字:采用小駝峰命名。
4. 參數列表:如果方法沒有參數,()中什么都不寫,如果有參數,需指定參數類型,多個參數之間使用逗號隔開。
5. 方法體:方法內部要執行的語句。
6. 在java當中,方法必須寫在類當中。
7. 在java當中,方法不能嵌套定義。
8. 在java當中,沒有方法聲明一說。(聲明與定義不區分)
調用過程:
調用方法—>傳遞參數—>找到方法地址—>執行被調方法的方法體—>被調方法結束返回—>回到主調方法繼續往下執行
形象圖示:
注意:
1,定義方法的時候, 不會執行方法的代碼. 只有調用的時候才會執行.
2,一個方法可以被多次調用.
對于形參與實參的關系,大家肯定不陌生,那就是形參是實參的一份臨時拷貝,也就是說形參的改變不會影響到實參。
具體原因圖示:(因為具體涉及到函數棧幀的問題比較復雜,這里就給大家簡略的解釋下)
所以,由圖可以知道,傳值調用的話,形參與實參的值根本就不是存儲在同一個空間,所以而這不會相互干擾,在C語言中,如果你希望形參的改變能夠影響到實參,那就必須是傳址調用,但是在Java里面沒有傳址這種說法,解決方法只能是利用引用(具體后面會詳細介紹)。
public class TestDemo220426 { public static int addInt(int x,int y){ return x + y; } public static double addDouble(double x,double y){ return x + y; } public static void main(String[] args) { int a = 10; int b = 10; int ret = addInt(a,b); double c = 11.1; double d = 12.1; double ret1 = addDouble(c,d); } }
看這段代碼,addint,adddouble這兩個方法,目的都是為了求兩個數的和,但是你得定義兩個不同的函數,函數名不同,但往往有時候取名字又是一件頭疼的事,所以既然方法的本質功能都是一樣的,只是可能參數不同,那我們能不能都用同一個函數名呢?
答案是肯定的,而這種就叫做方法的重載。
在Java中,如果多個方法的名字相同,參數列表不同,則稱該幾種方法被重載了。也就是一個名字但卻有不同的涵義。
public class TestDemo220426 { public static int add(int x,int y){ return x + y; } public static double add(double x,double y){ return x + y; } public static void main(String[] args) { int a = 10; int b = 10; int ret = add(a,b); System.out.println(ret); double c = 11.1; double d = 12.1; double ret1 = add(c,d); System.out.println(ret1); } }
程序運行截圖:
由上面的程序可以看出,都是實現相加的功能,但是定義的是兩個不同的函數實現,只是函數名一樣,這就是函數重載。編譯器會根據你傳入的參數的不同去調用相應的函數。
注意:
1. 方法名必須相同。
2. 參數列表必須不同(參數的個數不同、參數的類型不同、類型的次序必須不同)(需要以參數來區分)
3. 與返回值類型是否相同無關
4. 不能定義僅僅以返回值區分的兩個函數,這樣不能構成重載
5. 編譯器在編譯代碼時,會對實參類型進行推演,根據推演的結果來確定調用哪個方法
方法簽名即:經過編譯器編譯修改過之后方法最終的名字。具體方式:方法全路徑名+參數列表+返回值類型,構成方法完整的名字。用來區分重載的函數
如何可以查看到我們的方法簽名:
1. 先對工程進行編譯生成.class字節碼文件
2. 在控制臺中進入到要查看的.class所在的目錄
3. 輸入:javap -v 字節碼文件名字即可
定義:一個方法在執行過程中調用自身, 就稱為 "遞歸。
遞歸的必要條件:
1. 遞歸的公式。
2. 遞歸的終止條件。
public static int func(int num){ if(num == 1){ return 1; } return num*func(num - 1); } public static void main(String[] args) { // 遞歸求階乘 Scanner scan = new Scanner(System.in); System.out.println("請輸入一個數:"); int num = scan.nextInt(); int ret = func(num); System.out.println("階乘為:" + ret); } }
在這里我們以求一個數的階乘的代碼為例來分析一個遞歸的過程:
遞歸的過程其實不復雜,看成兩個部分,一個是遞出去,而是歸回來,上面的藍色箭頭是遞的過程,紅色箭頭是歸的過程。
按順序打印一個數字的每一位(例如 1234 打印出 1 2 3 4)
public class TestDemo220427 { public static void myprint(int num){ if(num < 10){ System.out.println(num%10); return; } myprint(num/10); System.out.println(num%10); return; } public static void main(String[] args) { // 遞歸實現按順序打印數字的每一位 Scanner scan = new Scanner(System.in); System.out.println("請輸入一個數:"); int num = scan.nextInt(); myprint(num); } }
求斐波那契數列的第 N 項
public class TestDemo220428 { public static int fib1(int n){ int f1 = 1; int f2 = 1; int f3 = 1; for(int i = 3;i <= n;i++){ f3 = f1 + f2; f1 = f2; f2 = f3; } return f3; } public static int fib(int n){ if(n == 1 || n == 2){ return 1; } return fib(n-1) + fib(n-2); } public static void main(String[] args) { // 遞歸求斐波那契數列的第n項 Scanner scan = new Scanner(System.in); System.out.println("請輸入您想要求取的項數:"); int n = scan.nextInt(); int ret = fib1(n); System.out.println("第" + n + "項為:" + ret); } }
利用遞歸求斐波那契數列的第n項的話,其實是一個雙路遞歸,不推薦這種求解的方法,因為會算很多重復的項,效率很低,一般都是選擇循環迭代的方式來生成斐波那契數即可。
以上就是關于“Java方法使用實例分析”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。