一刃滓、什么是方法
在我們的日常生活中酌媒,方法可以理解為要做某件事情欠痴,而采取的解決辦法。
在java中秒咨,方法就是用來完成解決某件事情或?qū)崿F(xiàn)某個功能的辦法喇辽。
對于以程序來說,方法是完成特定功能的雨席、相對獨立的程序段菩咨。
方法的特征是 =>()
二、方法的分類
(1)系統(tǒng)方法
在Java中陡厘,系統(tǒng)擁有自帶的系統(tǒng)方法
例如
System.out.println()
Arrays.toString()
這些方法都是Java開發(fā)工具包( jdk )提供好的系統(tǒng)方法
(2)自定義方法
自定義方法是我們根據(jù)需求抽米,自定義出能完成特定功能,解決問題的程序段
自定義方法的構(gòu)成:
[修飾符] 返回值類型 方法名稱([參數(shù)表]){
//方法體
}
例如:
public static void play(){
}
public String play(Sting str){
}
三糙置、使用方法
(1)使用方法
分別輸入兩個學生的語文和數(shù)學成績云茸,然后分別計算兩人總分。
未使用方法的做法:
public static void main(String[] args) {
int chinese = 0;
int math = 0;
int sum = 0;
//第一名學生成績
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入語文成績");
chinese = scanner.nextInt();
System.out.println("請輸入數(shù)學成績");
math = scanner.nextInt();
sum = chinese + math;
System.out.println("第一名學生總成績?yōu)椋?+sum);
//第二名學生成績
System.out.println("請輸入語文成績");
chinese = scanner.nextInt();
System.out.println("請輸入數(shù)學成績");
math = scanner.nextInt();
sum = chinese + math;
System.out.println("第二名學生總成績?yōu)椋?+sum);
}
我們可以看到谤饭,相同的代碼我們用了兩遍标捺,就很冗余,而方法就是能夠幫助我們提高代碼的復用率揉抵,讓我們的代碼更加的簡潔高效亡容。
使用了方法的代碼
public static void getSum(){
int chinese = 0;
int math = 0;
int sum = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入語文成績");
chinese = scanner.nextInt();
System.out.println("請輸入數(shù)學成績");
math = scanner.nextInt();
sum = chinese + math;
System.out.println("學生總成績?yōu)椋?+sum);
}
public static void main(String[] args) {
getSum();
getSum();
}
上面的代碼中,我們使用了getSum()方法來獲得學生的總成績功舀,每調(diào)用一次方法萍倡,就可以得到一個學生的總成績,減少了代碼冗余辟汰。
但是列敲,方法定義遵循功能單一原則阱佛,也就是一個方法只做一件事。所以戴而,上面的代碼是有缺陷的凑术。既有獲得總分,又要輸出所意,這是兩件事淮逊。
(2)設計方法的返回值
如果主調(diào)方法需要知道被調(diào)方法的處理結(jié)果,那么被調(diào)方法就需要設計成有返回值的方法
返回值的設計
- 在方法名前面寫返回值的類型
- 在方法體內(nèi)部使用return語句返回數(shù)據(jù)
- 主調(diào)方法通過賦值語句將方法返回值賦給變量
- 一個方法只能返回一個值
在上邊的例子中扶踊,我們發(fā)現(xiàn)了方法要遵循功能單一原則泄鹏,那么我們就不能把輸出放在getSum()方法里了。
我們可以單獨為輸出設計一個方法秧耗,在main方法里面輸出也行备籽,但是都要求我們知道被調(diào)方法的返回值
//被調(diào)方法
public static int getSum(){
int chinese = 0;
int math = 0;
int sum = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入語文成績");
chinese = scanner.nextInt();
System.out.println("請輸入數(shù)學成績");
math = scanner.nextInt();
sum = chinese + math;
return sum;
}
//主調(diào)方法
public static void main(String[] args) {
System.out.println("第一位學生成績?yōu)?+getSum());
System.out.println("第二位學生成績?yōu)?+getSum());
}
我們從主調(diào)方法的輸出語句中調(diào)用被調(diào)方法,得到了被調(diào)方法的返回值sum總分分井。
(3)方法中常見的問題
(1)如果方法定義為void车猬,表示不返回值,此時return后面不允許寫返回的數(shù)據(jù)
(2)方法返回值定義了返回什么類型的值尺锚,就必須使用return返回什么類型的值珠闰。
(3)當方法沒有返回值時,不允許主調(diào)方法接收返回值瘫辩。
(4)返回數(shù)據(jù)的類型要與返回值類型一致伏嗜。
(5)使用if語句時,如果條件a>0,語句內(nèi)return杭朱,但是沒有寫出<=0的條件阅仔,則會出現(xiàn)錯誤,必須要講條件都考慮到弧械。
(6)方法遇到return后就結(jié)束了方法八酒,后面的語句沒有機會執(zhí)行。
(4)形式參數(shù)與實際參數(shù)
主調(diào)方法提供的參數(shù)是實際參數(shù)
被調(diào)方法接收數(shù)據(jù)的參數(shù)是形式參數(shù)
主調(diào)方法的實參傳遞給被調(diào)方法的形參刃唐。按照個數(shù)羞迷,順序依次賦值
(5)方法參數(shù)引用類型和基本數(shù)據(jù)類型的區(qū)別
傳遞基本類型參數(shù)時:
當方法調(diào)用時,若傳遞基本類型的值画饥,那么在被調(diào)方法內(nèi)部修改了形參的值衔瓮,則在主調(diào)方法中的實參不受影響。
傳遞引用類型參數(shù)時:
當方法調(diào)用時抖甘,若傳遞引用值(內(nèi)存地址)热鞍,那么在被調(diào)方法內(nèi)部修改了形參指向內(nèi)存空間的值,那么主調(diào)方法中的實參指向空間的值也被修改了。