?作者簡介:大家好,我是橘橙黃又青,一個想要與大家共同進步的男人????
??個人主頁:橘橙黃又青-CSDN博客
目標(biāo):
?廢話不多說,我們直接開始
??1.方法概念
1.1什么是方法(method)
1. 是能夠模塊化的組織代碼 ( 當(dāng)代碼規(guī)模比較復(fù)雜的時候 ).2. 做到代碼被重復(fù)使用 , 一份代碼可以在多個位置使用 .3. 讓代碼更好理解更簡單 .4. 直接調(diào)用現(xiàn)有方法開發(fā) , 不必重復(fù)造輪子 .
?1.2 方法定義
方法語法格式:
// 方法定義修飾符 返回值類型 方法名稱 ([ 參數(shù)類型 形參 ...]){????????方法體代碼 ;????????return 返回值 ;}
?比如說:
public class Method{
// 方法定義
public static boolean isLeapYear(int year){
if((0 == year % 4 && 0 != year % 100) || 0 == year % 400){
return true;
}else{
return false;
}
}
}
1. 修飾符:現(xiàn)階段直接使用 public static 固定搭配2. 返回值類型:如果方法有返回值,返回值類型必須要與返回的實體類型一致,如果沒有返回值,必須寫成void3. 方法名字:采用小駝峰命名4. 參數(shù)列表:如果方法沒有參數(shù), () 中什么都不寫,如果有參數(shù),需指定參數(shù)類型,多個參數(shù)之間使用逗號隔開5. 方法體:方法內(nèi)部要執(zhí)行的語句6. 在java當(dāng)中,方法必須寫在類當(dāng)中7. 在 java 當(dāng)中,方法不能嵌套定義8. 在 java 當(dāng)中,沒有方法聲明一說
1.3 方法調(diào)用的執(zhí)行過程

【注意事項】
- 定義方法的時候, 不會執(zhí)行方法的代碼. 只有調(diào)用的時候才會執(zhí)行.
- 一個方法可以被多次調(diào)用.
?比如說:
public class TestMethod {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += fac(i);
}
System.out.println("sum = " + sum);
}
public static int fac(int n) {
System.out.println("計算 n 的階乘中n! = " + n);
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
}
輸出結(jié)果:
計算 n 的階乘中 n ! = 1計算 n 的階乘中 n ! = 2計算 n 的階乘中 n ! = 3計算 n 的階乘中 n ! = 4計算 n 的階乘中 n ! = 5sum = 153
1.4 實參和形參的關(guān)系(重要)
Java中方法的形參就相當(dāng)于sum函數(shù)中的自變量n,用來接收sum函數(shù)在調(diào)用時傳遞的值的。形參的名字可以隨意取,對方法都沒有任何影響,形參只是方法在定義時需要借助的一個變量,用來保存方法在調(diào)用時傳遞過來的值。
比如說:
public static int getSum(int N){ // N是形參
return (1+N)*N / 2;
}
getSum(10); // 10是實參,在方法調(diào)用時,形參N用來保存10
getSum(100); // 100是實參,在方法調(diào)用時,形參N用來保存100
public static int add(int a, int b){
return a + b;
}
add(2, 3); // 2和3是實參,在調(diào)用時傳給形參a和b
public class TestMethod {
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b);
System.out.println("main: a = " + a + " b = " + b);
}
public static void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
System.out.println("swap: x = " + x + " y = " + y);
}
}
輸出結(jié)果:
swap : x = 20 y = 10main : a = 10 b = 20
?【原因分析】
public class TestMethod {
public static void main(String[] args) {
int[] arr = {10, 20};
swap(arr);
System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}
public static void swap(int[] arr) {
int tmp = arr[0];
arr[0] = arr[1];
arr[1] = tmp;
}
}
運行結(jié)果:
1.5 沒有返回值的方法
?方法的返回值是可選的. 有些時候可以沒有的,沒有時返回值類型必須寫成void
代碼示例
class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
print(a, b);
}
public static void print(int x, int y) {
System.out.println("x = " + x + " y = " + y);
}
}
??2. 方法重載
2.1 為什么需要方法重載
public class TestMethod {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = add(a, b);
System.out.println("ret = " + ret);
double a2 = 10.5;
double b2 = 20.5;
double ret2 = add(a2, b2);
System.out.println("ret2 = " + ret2);
}
public static int add(int x, int y) {
return x + y;
}
}
// 編譯出錯Test . java : 13 : 錯誤 : 不兼容的類型 : 從 double 轉(zhuǎn)換到 int 可能會有損失double ret2 = add ( a2 , b2 );????????????????^
由于參數(shù)類型不匹配, 所以不能直接使用現(xiàn)有的 add 方法.?
一種比較簡單粗暴的解決方法如下: ?
public class TestMethod {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = addInt(a, b);
System.out.println("ret = " + ret);
double a2 = 10.5;
double b2 = 20.5;
double ret2 = addDouble(a2, b2);
System.out.println("ret2 = " + ret2);
}
public static int addInt(int x, int y) {
return x + y;
}
public static double addDouble(double x, double y) {
return x + y;
}
}
2.2 方法重載概念
?在自然語言中,經(jīng)常會出現(xiàn)“一詞多義”的現(xiàn)象,比如:“好人”
?在Java中,如果多個方法的名字相同,參數(shù)列表不同,則稱該幾種方法被重載了。
public class TestMethod {
public static void main(String[] args) {
add(1, 2); // 調(diào)用add(int, int)
add(1.5, 2.5); // 調(diào)用add(double, double)
add(1.5, 2.5, 3.5); // 調(diào)用add(double, double, double)
}
public static int add(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
public static double add(double x, double y, double z) {
return x + y + z;
}
}
分析:
注意:
1. 方法名必須相同2. 參數(shù)列表必須不同 ( 參數(shù)的個數(shù)不同、參數(shù)的類型不同、類型的次序必須不同 )3. 與返回值類型是否相同無關(guān)4. 編譯器在編譯代碼時,會對實參類型進行推演,根據(jù)推演的結(jié)果來確定調(diào)用哪個方法
?2.3 方法簽名
public class TestMethod {
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) {
add(1,2);
add(1.5, 2.5);
}
}
1. 先對工程進行編譯生成 .class 字節(jié)碼文件2. 在控制臺中進入到要查看的 .class 所在的目錄3. 輸入: javap -v 字節(jié)碼文件名字即可
?也就是說:由于參數(shù)列表不同,編譯器會把他們定義成不同的方法。
?方法簽名中的一些特殊符號說明:
特殊字符
|
數(shù)據(jù)類型
|
---|---|
V
|
void
|
Z |
boolean
|
B |
byte
|
C |
char
|
S |
short
|
I |
int
|
J |
long
|
F |
float
|
D |
double
|
[ |
數(shù)組
(
以
[
開頭,配合其他的特殊字符,表述對應(yīng)數(shù)據(jù)類型的數(shù)組,幾個
[
表述幾維數(shù)組
)
|
L |
引用類型,以
L
開頭,以
;
結(jié)尾,中間是引用類型的全類名
|
??3. 遞歸
?
遞歸的必要條件: ?
1. 將原問題劃分成其子問題,注意:子問題必須要與原問題的解法相同2. 遞歸出口
比如說:文章來源:http://www.zghlxwxcb.cn/news/detail-844431.html
遞歸求 N 的階乘文章來源地址http://www.zghlxwxcb.cn/news/detail-844431.html
public static void main(String[] args) {
int n = 5;
int ret = factor(n);
System.out.println("ret = " + ret);
}
public static int factor(int n) {
if (n == 1) {
return 1;
}
return n * factor(n - 1); // factor 調(diào)用函數(shù)自身
}
到了這里,關(guān)于【JAVASE】帶你了解的方法魅力的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!