何謂方法?
方法的定義及使用
方法重載
命令行傳參
可變參數
遞歸
作業
1.何謂方法?
-
Java方法是語句的集合,它們在一起執行一個功能,比如 System.out.println() 專門打印輸出的
-
-
方法包含於類或對象中
-
方法在程序中被創建,在其他地方被引用
-
-
設計方法的原則:方法的本質計算實現某個功能的語句的集合。設計的時候保持方法的原子性。
即一個方法只完成一個功能,有利於后期的擴展
-
注意方法的命名規則
2.方法的定義及調用
-
方法的定義
-
修飾符:告訴編譯器任何調用該方法,定義了該方法的訪問類型。可選
-
返回值類型:returnValueType 是方法的返回值類型。沒有返回值的方法 returnValueType 關鍵字是void
-
方法名:是方法的名稱,用於被調用
-
參數類型:調用方法時,傳遞的時實參;定義方法時,設置形式參數作占位符。可選
-
方法體:定義該方法的功能
修飾符 返回值類型 方法名(參數類型 參數名){
方法體;
...;
return 返回值;
}
//例子
public static double sumCdt(double a,double b){
return a*a+b*b;
}
-
-
方法調用
-
調用方法:對象名.方法名(實參列表)
-
Java支持兩種調用方法的方式,根據方法是否有返回值來選擇
-
方法有返回值時,調用方法
// 定義於返回值同類型的變量 result 用於接收返回值,returnValueType result = 方法名(實參);
// 例子
int num = add(30,40);
String str_1 = printSort("hello,world");
int[] array_1 = sort(array); -
沒有返回值,調用方法
//沒有返回值,不需要定義變量去接受,直接執行方法即可, 方法名(實參);
// 例子
System.out.println("hello,world!");
-
-
值傳遞 和 引用傳遞
-
值傳遞:Java 是 值傳遞
-
引用傳遞
-
3.方法重載
-
定義:方法重載就是在一個類中,有相同的方法名稱,但形參不同的方法
-
方法重載的規則
-
方法名必須相同,且形參一定不同(個數不同,或類型不同,或參數排列順序不同等
-
方法的返回類型可以相同也可以不同
-
僅僅返回類型不同不是方法的重載
-
-
方法重載實現的原理
方法名稱相同時,編譯器會根據調用方法的實參個數,實參類型等去逐個匹配,來選擇使用對應的方法,如果匹配失敗就會報錯。
4.命令行傳參
有時候我們會希望運行一個程序的時候再傳遞給它信息。這要靠傳遞命令行參數給main()方法實現
比如 在 cmd 中輸入 java -version ,就會輸出java的版本信息
我們自己寫一個類似的例子,這要靠傳遞命令行參數給main()方法實現
1. 寫一個實現在 cmd 中簡單打印一下輸入參數的內容的功能
-
在cmd中進入文件對應路徑后,先編譯好 java 文件,在執行文件的時候報錯。
為什么?因為在該路徑下找不到主類
-
進入主類所在路徑后,在執行文件,此時需要從主類依次向下調用
-
接着輸入參數,執行函數,就實現了 在cmd 命令行中傳參的簡單打印功能。
5.可變參數
-
JDK 1.5 開始,Java支持傳遞同類型的可變參數的方法
-
在方法聲明中,在指定形式參數后面加一個省略號(...)
-
一個方法智能指定一個可變參數,並且它必須是方法的最后一個參數。任何普通參數必須在它的前面聲明。
//例子
package MethodArray.MtehodStudy;
public class MethodTest_3 {
public static void main(String[] args) {
// 可變參數輸入,相當於數組
printMax(123,32,4,3,41,45.2);
}
public static void printMax(double... numbers){
// 等價於數組的使用方法
if (numbers.length==0){
System.out.println("你沒有任何輸入");
}
double result = numbers[0];
// 取最大值
for (double number : numbers) {
if (number > result) {
result = number;
}
}
System.out.println("這組數據的最大值是:"+result);
}
}
6.遞歸
-
定義:A方法調用B方法,叫引用,A方法調用A方法,叫遞歸
-
意義:遞歸可以用簡單的程序來解決一下復雜的問題。它通常把一個大型問題層層轉化為小問題來求解。遞歸的能力在於用少量的語句定義對象的無限集合。
-
遞歸結構包含兩個部分:
-
遞歸頭:什么時候將不調用自身。如果沒有遞歸頭,程序將陷入死循環。
-
遞歸體:什么時候需要調用自身方法。
-
-
問題:利用遞歸求10的階乘
package MethodArray.MtehodStudy;
public class MethodTest_4 {
public static void main(String[] args) {
int result = fun(10);
System.out.println(result);
}
public static int fun(int n){
if(n==1){
return n;
}else {
return n*fun(n-1);
}
}
} -
注意:由於Java使用的是棧機制的(相當於一個瓶子,最底層是main方法,沒調用一個方法就在上面壓一層,因此不能無限壓)
-
調用遞歸會帶來大量的函數調用,運用遞歸需注意基數問題,調用過多會因為電腦內存不夠而導致程序崩潰。
-
調用次數少才使用遞歸,重要的是我們要學習遞歸的思想,遞歸是解決復雜問題的一種思路
-
7.作業
-
寫一個計算器,要求實現加減乘除功能,並且能循環接收新的數據,通過用戶交互實現。
package MethodArray.MtehodStudy;
import java.util.Scanner;
// 該計算器可以一直進行計算,通過輸入 非數字 來結束輸入並打印最終結果。
// 如果運算符那里的輸入不合要求,還可以重新輸入運算符,進行運算
public class CalcProject_2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
double result = 0; // 用於存儲最后的結果
int sure = 0; // 判斷語句是否進入switch 語句選擇
double temp = 0; // 用於存儲每一輪臨時值
double num1;
System.out.println("請輸入數字:");
if(scan.hasNextDouble()){
num1 = scan.nextDouble();
System.out.println("請輸入+ - * /");
while (scan.hasNext()){
String str = scan.next();
System.out.println("請輸入數字:");
if(scan.hasNextDouble()){
double num2 = scan.nextDouble();
switch (str){
case "+":
temp = add(num1,num2);
sure = 1;
num1 = temp;
break;
case "-":
temp = sub(num1,num2);
sure = 1;
num1 = temp;
break;
case "*":
temp = cdt(num1,num2);
sure = 1;
num1 = temp;
break;
case "/":
temp = div(num1,num2);
sure = 1;
num1 = temp;
break;
default:
System.out.println("您輸入的運算符不合法");
break;
}
if(sure==0){
System.out.println("此時的結果為:"+num1);
}else {
System.out.println("此時的結果為:"+temp);
}
System.out.println("請輸入+ - * /");
}else {
if(sure==0){
result = num1;
}else {
result = temp;
}
break;
}
}
System.out.println("最終的結果為:"+result);
scan.