“這裡是雲端源想IT,幫你輕松學IT”
嗨~ 今天的你過得還好嗎?
時光緩緩
歲月凝香
暖陽碎了一地的光
- 2023.05.26 -
計算機的函數,是一個固定的一個程式段,或稱其為一個子程式,它在可以實作固定運算功能的同時,還帶有一個入口和一個出口,所謂的入口,就是函數所帶的各個參數,我們可以通過這個入口,把函數的參數值代入子程式,供計算機處理;所謂出口,就是指函數的函數值,在計算機求得之後,由此口帶回給調用它的程式。
前兩期内容我們講了Java中資料類型與變量的相關基礎知識,今天我們再來看看Java中函數的基本知識和應用,老規矩!先收藏一波!
一、函數的定義
什麼是函數?函數就是定義在類中的具有特定功能的一小段獨立的代碼,也稱為方法。
函數格式:
修飾符 傳回值類型 函數名稱(參數類型 參數1,參數類型參數2, . . . ){
函數執行代碼;
return 傳回值;
}
eg:
public static int addFunc(int a,int b){
return a+b;
}
這是一個名為"addFunc"的Java方法或函數,具有兩個整數參數"a"和"b"。它具有public通路修飾符,static關鍵字表示可以在不建立類的執行個體的情況下調用它,并傳回一個整數值。實作将兩個參數相加并使用return語句傳回結果。
傳回值類型:函數運作後的結果類型。
參數類型:是形式參數的資料類型。
形式參數:是一個變量,由于存儲調用函數時傳遞給函數的實際參數。
實際參數:傳遞給函數的具體值。
return:用于結束函數。
傳回值:函數運算後的結果值,該值會傳回給該函數的調用者。
注意:當函數沒有傳回值類型是用void來表示;如果傳回值類型是void,name函數中的return語句可以省略不寫。
例如:
public static void sout( int a){
System.out.println(a);
}
二、函數的特點
- 定義函數可以将功能代碼進行封裝使用
- 便于對該功能進行複用
- 函數隻有被調用時才會執行
- 函數的出現提高了代碼的複用性
注意:
- 函數中隻能調用函數,不可以在函數内部定義函數。
- 定義函數時函數的結果應該傳回給調用者,交給調用者處理。
函數調用的記憶體模型:就是函數的壓棧過程、彈棧過程。
定義函數:
1、函數是一個獨立的功能,明确該功能運算結果。
2、明确是否需要未知的内容參與運算。
三、函數的應用
定義函數的兩大原則:
(1)明确函數的功能結果是什麼,确定函數的傳回值類型。
(2)明确這個功能實作過程中是否需要未知内容參與運算,這就是函數的參數清單(參數的個數,參數的類型)。
下面分享幾個例子,讓大家更直覺的了解:
需求1: 定義一個功能,完成兩個整數的和的擷取。
思路:既然定義功能,就是可以用函數來展現。如何定義一個函數呢?通過兩步驟完成。
- 步驟一:這個功能的結果是什麼?
- 是和--->傳回值類型是int 。
- 步驟二:這個功能實作過程中是否需要未知内容參與運算?
- 有,加數和被加數
注意:傳回值類型和參數類型沒有直接關系。
public static int myAdd(int a,int b)
{
int sum = a+b;
return sum;
}
需求2: 定義一個功能,畫一個矩形在控制台。
- 步驟一:這個功能的結果是什麼?
- 沒有結果----> void
- 步驟二:這個功能實作過程中是否需要未知内容參與運算?
- 有,行和列不确定----->(a int,b int)
public static void myDraw(int row,int col)
{
for (int x=1; x<=row ;x++ )
{
for (int y=1;y<=col ; y++ )
{
System.out.print("*");
}
System.out.println();
}
}
需求3: 定義一個功能,比較兩個數是否相等。
- 步驟一:這個功能的結果是什麼?
- 有 ----> boolean.
- 步驟二:這個功能實作過程中是否需要未知内容參與運算?
- 有 ----> (int a,int b)
public static boolean myEquals(int a,int b)
{
/*
if(a==b)
return true;
else
return false;
boolean x ;
if(a==b)
x = true;
else
x = false;
return x;
*/
// return (a==b)?true:false;
return a==b;
}
四、函數的重載
在同一個類中,允許存在一個以上的同名函數,隻要他們的參數個數或者參數類型不用即可。函數的重載現象,隻存在于強資料類型語言中(java、c、c++),弱資料類型語言不存在(如:JavaScript、PHP、python)。
重載特點:與傳回值無關,隻看參數清單。
重載的好處:友善于閱讀,優化了程式設計。
函數的重寫(Overriding):
- “重載”不同于“重寫”
- “重寫(覆寫)”概念存在于繼承關系中,子類可繼承父類中的方法而不需要單獨編輯,這提供便捷化。但有的時侯,子類不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。
- 父類中存在一個函數,子類中也存在一個同名函數,在了類中對函數重新編輯,做得更具體化。
重寫的規則:
1、在子類中可以根據需要對從父類中繼承來的方法進行重寫。
2、重寫的方法和被重寫的方法必須具有相同方法名稱、參數清單和傳回類型。
3、重寫方法不能使用比被重寫的方法更嚴格的通路權限。
局部變量:也稱本地變量,是定義在函數内部的變量,在使用之前必須指派;
下面再給大家分享一個示例:
package com.home.study.function;
/*
函數重載:
1、同一個類中
2、同名稱
3、參數個數不同,或者參數類型不同
4、與傳回值類型無關
*/
public class FunctionDemo {
public static void main(String[] args) {
int a=3;
int b=5;
int c=7;
// a+b
int sum=0;
double sum_d =0.0;
sum = add(a, b);
System.out.println(sum);
sum = add(a, b, c);
System.out.println(sum);
sum_d = add(a, b);
System.out.println(sum_d);
}
public static int add(int a, int b){
return a+b;
}
public static double add(double a,double b){
return a+b;
}
public static int add (int a, int b,int c){
return a+b+c;
}
}
這段代碼示範了 Java 中函數重載的概念。函數重載指在同一個類中定義了多個同名函數,但是它們的參數清單不同(即參數個數或類型不同)。在調用該函數時,Java 根據傳入的參數類型和個數比對對應的函數,并執行相應的代碼塊。
此外,函數重載與傳回值類型無關,即可以有不同的傳回值類型。在上述示例中,add 函數被重載了三次:兩個整型參數的 add 函數、兩個雙精度浮點型參數的 add 函數和三個整型參數的 add 函數。通過傳入不同的參數,實作了不同類型的加法操作。
五、關于遞歸
遞歸是函數自身調用自身的現象,遞歸的思想是分治思想的展現。
典型遞歸:(斐波那契數列)。
代碼如下:
package Demo;
import java.util.Scanner;
public class ZuoYe1 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print(“請輸入數字:”);
int num = sc.nextInt();
//數列:1,1,2,3,5,8…
for (int i=1;i<=num;i++){ //輸出num個斐波那契數列
System.out.print(input(i));
}
}
public static int input(int n){
if(n1 || n2)
return 1;
else
return input(n-1)+input(n-2);
}
}
這段代碼是一個Java程式,它要求使用者輸入一個數字,然後輸出對應數量的斐波那契數列。斐波那契數列是指開始的兩個元素都為1,随後的每個元素都是前兩個元素的和。
在主函數中,首先建立了一個Scanner對象用于讀取使用者輸入,然後提示使用者輸入數字,并且将該值存儲在變量num中。
接下來使用for循環周遊num次,每次調用名為input()的函數并傳入循環變量i作為參數,最終輸出對應的斐波那契數列。在input()函數中,如果參數n小于等于2,則傳回1,否則遞歸調用自身,計算n-1和n-2的斐波那契數列元素之和,最終傳回結果。
本文從函數的定義、特點、運用以及函數的重載和遞歸這幾個方面講解了Java中函數的相關基礎知識,你學會了嗎?記得收藏起來以便學習時随時檢視哦。
我們下期再見!
END
文案編輯|雲端學長
文案配圖|雲端學長
内容由:雲端源想分享