如果你稍微接觸過java,我們來思考一下如果讓你形容一下方法(method),你會怎么描述呢?
我起初認為它就相當于C語言當中的函式(function)(但其實它們之間是有些差別的)它擁有一個特定的功能,如果我們需要,我們就可以呼叫它,
簡單下個定義:方法就是把需要重復 / 共同使用的代碼進行封裝,然后在需要時進行呼叫
那么為什么要使用方法呢?假設你要對每位同學都要說上一句下午開會,那你會選擇一個一個說,還是把他們喊到一起然后說一遍下午開會,顯然是后者,方法亦是如此,正如上面所說封裝重復使用的代碼,這樣就可以極大的減少函式冗余,增加代碼復用性,
接下來正式開始講解java的方法
跳轉目錄
- 1.方法的基本使用
- 2.方法呼叫的執行程序
- 3.方法的多載
1.方法的基本使用
首先看一下方法怎么創建
public static 回傳值型別 方法名(引數串列){
方法的內容
}
回傳值型別就是在方法結尾return一個值,上面說的什么型別就寫什么型別,若回傳值為void可以不寫該句或寫一個 return;,若有回傳值,呼叫方需要接識訓傳值
方法名最好見名思意,讓人一眼看出這個方法可以干什么,由于java采用Unicode編碼,故可以以中文命名,但是最好不要用中文,網路這么發達,你懂得!
引數串列就是方法中需要使用的資料,可以通過呼叫方傳輸值給方法
方法的意義:(重在理解)
- 能夠模塊化的組織代碼(當代碼規模較復雜時)
- 做到代碼被重復使用,一份代碼可以在多個位置使用
- 讓代碼更好理解與使用
- 可以直接呼叫現有方法開發,增加時間利用率
注意:方法必須寫在類的內部,可以寫在呼叫方法的上面或者下面,Java中不存在“函式宣告”的概念
public class Test {
public static int add(int x,int y){//這里的x,y是形式引數
return x+y;
}
public static void main(String[] args) {
int a,b;
Scanner sc = new Scanner(System.in);
a = sc.nextInt();//鍵盤輸入
b = sc.nextInt();
System.out.println(add(a, b));//這里傳出的a,b是實際引數
}
}
建議直接回傳要用的數值而不是就地列印,因為使用者可能并不想算兩數和后進行列印,他有可能會進行其他操作(比如再加個10),如果就地列印的話,你的代碼復用性就下降了,對別人來說沒有用,
2.方法呼叫的執行程序


該圖中的堆疊幀是按上面的程式所畫的
經上面的圖示你是否對方法在記憶體中的開辟堆疊幀與銷毀有一定的了解了呢?
你可以看看下面這道題,猜猜a和b是否會互換
public static void swap(int x, int y){
int tmp = x;
x = y;
y = tmp;
}
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a+" "+b);
swap(a,b);
System.out.println(a+" "+b);
}
答案是不會,因為swap和main開辟了兩塊堆疊幀,雖然swap里x與y進行了互換,但對main中的a和b沒有任何影響,即形參的改變,不一定會影響實參
要想交換用方法交換a和b的值需要傳參考(如陣列),后續我會寫到,并不和C語言一樣傳指標(&a,&b),Java中&不代表取地址符,只是按位與,
(Java中堆疊上的記憶體地址是取不到的,只能拿到堆上的地址,且其也不是真實地址,為了安全是通過哈希得到的)
接下來看一道題
如果求1!+2!+3!+……n!=?你會怎么寫?
如果不使用方法的話會稍稍有一點復雜,且有些地方會有一些易錯點
public static int fac(int k){//求階乘
int m = 1;
for (int i = 1; i <= k; i++) {
m *= i;
}
return m;
}
public static int facSum(int n){//求階乘和
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += fac(i);
}
return sum;
}
public static void main(String[] args) {
int n = 5;
System.out.println(facSum(n));
}
使用方法可以避免二次回圈,讓代碼更加簡潔
3.方法的多載
多載,字面意思就是過載了,比如說一輛車載重1噸,結果你放了1.5噸的東西上去,就是超過它的承受范圍了,但在這了意味著方法可以同名,
什么意思呢,舉個例子,假如要你寫一個兩數相加的方法,需要怎么寫呢?
利用方法的多載,我們可以命名同為add的方法來實作不同型別的資料相加
雖然同名但引數串列不同,但系統會自動辨別你傳的是什么
public static int add(int x,int y){
return x+y;
}
public static double add(int x,double y){
return x+y;
}public static double add(double x,double y){
return x+y;
}
public static void main1(String[] args) {
int a=1,b=2;
double c=1.0,d=2.0;
System.out.println(add(a, b));
System.out.println(add(a, c));
System.out.println(add(c, d));
}
實作多載需要滿足三個條件:
- 方法名需相同
- 方法的引數串列不同(型別和個數)
- 方法回傳值無要求(是否相同不影響)
多載的優點
- 定義端(方法的提供者):使用相同的方法名(一個方法)來表示功能相同的(多個)方法,
- 呼叫端(方法的使用者): 在呼叫的時候,可以使用相同名字(一個名字)的方法實作不同的功能,
- 多載也是多型性的體現:一個內容,可以實作多個功能
突然漲了一波粉(當然非常感謝你們,你們的關注與點贊代表你們對我的認可)但是我有點小膨脹,感覺有點迷失方向了,但是我會好好調整自己,繼續努力提升自己去實作自己的目標的,首先定個小目標,粉絲數達到500,看看我要多久才能實作這個目標吧,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/278492.html
標籤:其他
