方法
-
System.out.println();//是什么嗎? //系統類+物件+方法 -
Java方法是一對陳述句的集合,他們一起負責執行一個功能
- 方法是解決一類問題的步驟的有序組合
- 方法包含于類或物件中
- 方法在程式中被創建,在其他地方被參考
-
設計原則: 方法本意是功能塊(類似C語言的函式), 就是實作某個功能的陳述句塊集合,設計方法最好保持方法的原子性,就是一個方法只完成1個功能,這樣有利于后期的擴展
-
命名規范: 首字母小寫+駝峰規則
-
方法都是寫在main外面的
-
package Method; public class Demo_0 { public static void main(String[] args) { //呼叫了add方法 //實參 int sum = add(1, 2);//int sum = add(1, 2); System.out.println(sum); //System.out.println(add(1, 2)); System.out.println("======================================"); //呼叫test test(); } //加法 形式引數 public static int add(int a, int b) {//有回傳值需要int等型別 return a + b;//回傳值 } //方法2 public static void test() {//回傳值為空void //while回圈輸出1~1000之間被5整除的數,并且3個每行 int i_1 = 0; while (i_1 <= 1000) { ++i_1; if (i_1 % 5 == 0) { System.out.print(i_1 + "\t\t");//不要加ln } //println輸出后會自動換行 if (i_1 % (5 * 3) == 0) { System.out.println(); } } } } //此段代碼不顯示圖片, 自身去試試代碼
方法的定義
-
方法包含一個方法頭和一個方法體
- **修飾符: **是可選的, 讓編譯器知道如何呼叫方法, 并且定義了方法的訪問型別
- 回傳值型別: 方法會有回傳值, return ValueType是方法回傳值的資料型別;,修飾符中需要使用static; 倘若方法無需回傳值, 需要使用關鍵字void
- **方法名: **方法的實際名稱, 方法名和引數表共同構成方法簽名
- **引數型別: **引數類似一個占位符, 當方法需要呼叫時, 傳遞給引數, 這個值被稱為實參或者變數;引數串列是指方法的引數型別、順序和引數的個數; 引數是可選的,意思就是方法名可以不包含任何引數
- 形式引數: 在方法被呼叫時用于接收外界輸入的資料(類似add(int a, int b)中的a與b)
- 實參: 呼叫方法的時實際傳遞給方法的資料(類似add(1, 2)中的1與2)
- **方法體: **方法體包含具體的陳述句、定義方法的功能
修飾符 回傳值型別 方法名(引數型別 引數名){ //修飾符包含了static或者void ... 方法體 ... return 回傳值; }
方法呼叫
-
//物件名.方法名(實參串列) -
Java支持呼叫方法的方式有兩種,根據方法是否回傳值來選擇
-
當方法回傳一個值的時候, 方法呼叫通常直接當作一個值
-
int larger = Max(30, 40);
-
-
若回傳值時void, 方法呼叫是一條陳述句
-
Java是值傳遞(暫且知道就行)
-
package Method; import java.util.Scanner; public class Demo_1 { public static void main(String[] args) { System.out.println("比誰大"); System.out.print("Input Number_1: "); Scanner Input = new Scanner(System.in);//創建一個名字"Input"的掃描器 int Number_1 = Input.nextInt();//用next方法接收 //nextInt()接收int型別的數值 // System.out.print("Input Number_2: "); Scanner Input2 = new Scanner(System.in);//創建一個名字"Input"的掃描器 int Number_2 = Input2.nextInt(); System.out.println("\t兩個數中這個最小: " + Max(Number_1, Number_2)); System.out.println("============================================"); System.out.println("比誰小"); System.out.print("Input Number_3: "); Scanner Input_Num3 = new Scanner(System.in);//創建一個名字"Input"的掃描器 int Number_3 = Input.nextInt();//用next方法接收 //nextInt()接收int型別的數值 System.out.print("Input Number_4: "); Scanner Input_Num4 = new Scanner(System.in);//創建一個名字"Input"的掃描器 int Number_4 = Input2.nextInt(); System.out.println("\t兩個數中這個最小: " + Min(Number_3, Number_4)); } //兩個數比大小,輸出大的 public static int Max(int a, int b) { if (a == b) { System.out.println("\tNumber_1 == Number_2"); //return 0; //終止方法 return a; } else if (a > b) { System.out.println("\t兩個數中Number_1最大"); return a; } else { System.out.println("\t兩個數中Number_2最大"); return b; } } // //兩個數比大小,輸出小的 public static int Min(int x, int y) { if (x == y) { System.out.println("\tNumber_3 == Number_4"); return x; } else if (x < y) { System.out.println("\t兩個數中Number_3最小"); return x; } else { System.out.println("\t兩個數中Number_4最小"); return y; } } // }

方法多載
- 多載就是在一個類中,有相同函式名稱, 但形參不同的函式
- 多載規則
- 方法名必須相同
- 引數串列必須不同(個數, 型別, 引數排列順序不同等)
- 方法回傳的型別可相同也可不通
- 僅僅回傳型別不同不足以成為方法多載
- 實作理論: 方法名稱相同時,編譯器會根據呼叫方法的引數個數,引數型別等逐個匹配, 以選擇對應的方法,如果匹配失敗,則編譯器報錯
- 多載與回傳值無關(回傳型別可相同也可不同)
package Method;
import java.util.Scanner;
public class Demo_1 {
public static void main(String[] args) {
//System.out.println("比誰大");
//System.out.print("Input Number_1: ");
//Scanner Input = new Scanner(System.in);//創建一個名字"Input"的掃描器
//int Number_1 = Input.nextInt();//用next方法接收
////nextInt()接收int型別的數值
//
//System.out.print("Input Number_2: ");
//int Number_2 = Input.nextInt();
//System.out.println("\t兩個數中這個最小: " + Max(Number_1, Number_2));
//Input2.close();
//Input.close();
//System.out.println("==============================================");
//System.out.println("比誰小");
//System.out.print("Input Number_3: ");
//Scanner Input = new Scanner(System.in);//創建一個名字"Input"的掃描器
//int Number_3 = Input.nextInt();//用next方法接收
////nextInt()接收int型別的數值
//
//System.out.print("Input Number_4: ");
//int Number_4 = Input.nextInt();
//System.out.println("\t兩個數中這個最小: " + Min(Number_3, Number_4));
//Input_Num3.close();
//Input_Num4.close();
///////////////////
System.out.println("比誰大");
System.out.print("Input Number_1: ");
Scanner Input = new Scanner(System.in);//創建一個名字"Input"的掃描器
double Number_1 = Input.nextDouble();//用next方法接收
//nextInt()接收int型別的數值
System.out.print("Input Number_2: ");
double Number_2 = Input.nextDouble();//若nextDouble變為nextInt不會出崔,但最后結果會跟隨最開頭的Double
System.out.println("\t兩個數中這個最小: " + Max(Number_1, Number_2));
Input.close();
Input2.close();
}
//兩個數比大小,輸出大的
public static int Max(int a, int b) {
if (a == b) {
System.out.println("\tNumber_1 == Number_2");
//return 0; //終止方法
return a;
} else if (a > b) {
System.out.println("\t兩個數中Number_1最大");
return a;
} else {
System.out.println("\t兩個數中Number_2最大");
return b;
}
}
public static double Max(double a, double b) {//針對Max()方法的多載;回傳double型別
if (a == b) {
System.out.println("\tNumber_1 == Number_2");
//return 0; //終止方法
return a;
} else if (a > b) {
System.out.println("\t兩個數中Number_1最大");
return a;
} else {
System.out.println("\t兩個數中Number_2最大");
return b;
}
}
//
//兩個數比大小,輸出大的
public static int Min(int x, int y) {
if (x == y) {
System.out.println("\tNumber_3 == Number_4");
return x;
} else if (x < y) {
System.out.println("\t兩個數中Number_3最小");
return x;
} else {
System.out.println("\t兩個數中Number_4最小");
return y;
}
}
//
}
- 注釋了的代碼可全部解開, 試試輸入的double型別和int型別的,最后輸出若有.0就是double型別;注意更改我代碼中Scanner等變數
命令列傳參(可以簡單了解)
-
以下代碼是需要在java檔案的路徑下用cmd進行編譯,參考Hello.java
-
以下代碼需要用更改編碼格式才可編譯
-
javac -encoding utf8 CmdTran.java //編碼格式
package Method;//注意自己的包名
public class CmdTran {//注意自己的檔案名
public static void main(String[] args) {
//命令列傳參
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "] = " + args[i]);
}
}
}

-
cmd視窗決議
- 在java檔案的所在路徑下編譯java檔案
- cd ../回退上一級檔案夾(可以體會下在其他檔案下參考自己寫的java檔案)
- 運行編譯好的java檔案(為何沒有輸出, 因為我們的java代碼是需要將引數輸出, 我并沒有引數輸入)
- 再一次運行java檔案, 在java Method.CmdTran輸入四個引數I am your Father
- 輸出了四個剛剛輸入的引數(陣列下標由0開始)
可變引數(不定項引數)
-
在JDK 1.5開始, Java支持傳遞同型別的可變引數給一個方法
-
方法宣告中, 在指定引數型別后加一個省略號(...)
-
一個方法中只能指定一個可變引數, 它必須是方法的最后一個引數; 任何普通的引數必須在它之前宣告
-
在一開始寫方法時,會有很多不確定變數, 我們需要寫多種方法(方法多載), 而每種方法都是只實作一個功能,依次針對不同情況
package Method;
public class ChangeData {
public static void main(String[] args) {
ChangeData cd = new ChangeData();//創建類的物件
cd.test(1.5F, 222, 3, 2);//創建一個物件cd, 并使用類中的test方法
} //x:1.5 i:222, 3, 2
public void test(float x, int... i) {
//不知道要傳入多少引數
System.out.println(x + " " + i[0] + " " + i[2]);
}
}
- 變長引數是 Java 的一個語法糖,本質上還是基于陣列的實作:
package Method;
public class ChangeData {
public static void main(String[] args) {
printMax(21, 25, 2, 56);
printMax(new double[]{1, 2, 5, 6, 7, 8, 9});//本質是陣列因此可以用陣列形式
}
public static void printMax(double... number) {
if (number.length == 0) {//當陣列長度=0
System.out.println("No argument passed");
return;
}
double max = number[0];//初始化
//找出最大值
for (int i = 1; i < number.length; i++) {
if (number[i] > max) {
max = number[i];
}
}
System.out.println("The Max value is " + max);
}
}

遞回
- A方法呼叫A方法! 自己呼叫自己
- 思想: 簡單程式解決復雜問題; 把大型復雜的問題層層轉化為一個與原問題相似的規模較小問題來求解
- 遞回結構: 遞回頭就是啥時候不呼叫自己,如果沒有就陷入死回圈
- 遞回結構: 遞回體就是啥時候呼叫自身方法
- 雖然代碼量簡單且少,但會占用很多空間
package Method;
public class InterJava {
public static void main(String[] args) {
InterJava inter = new InterJava();
// 沒有遞回頭, 寫會錯誤(堆疊溢位)
System.out.println(inter.f(5));
}
//5! = 1*2*3*4*5
public static int f(int n) {
if (n == 1) {//遞回頭
return 1;
} else {//遞回體
return n * f(n - 1);
}
}
}
- 遞回: 本質就是當我呼叫時, 只要我呼叫方法時沒用到遞回頭的條件我就必須使用遞回體陳述句從而不斷縮小了問題的本質, 當進行遞回體陳述句時,就可以將遞回體陳述句的結果不斷回傳上去
計算器實作
- 計算器,實作加減乘除,并能回圈接收新資料,通過互動實作
package Method;//注意包名
import java.util.Scanner;//創建輸入物件需要的包
public class Counter {//注意類名
public static void main(String[] args) {
//計算器,實作加減乘除,并能回圈接收新資料,通過互動實作
/*
寫4個方法:
加減乘除
利用回圈+ switch進行用戶互動
傳遞需要操作的兩個數
輸出結果
*/
Scanner scanner = new Scanner(System.in);//創建輸入
String m = "Y";//初始化回圈條件
while (m.equals("Y")) {
System.out.print("請輸入第一個數:");//輸入數值
int x = scanner.nextInt();
System.out.print("請輸入運算子:");//輸入運算子,作為switch條件
String o = scanner.next();
System.out.print("請輸入第二個數:");//輸入數值
int y = scanner.nextInt();
int result = 0;//初始化結果變數
switch (o) {//根據運算子變數,選擇一個case
case "+":
result = Add(x, y);
break;
case "-":
result = Sub(x, y);
break;
case "*":
result = Mul(x, y);
break;
case "/":
result = Div(x, y);
break;
default:
System.out.print("輸入錯誤");
}
System.out.println(x + o + y + "=" + result);
System.out.print("是否繼續下一組計算(Y/N): ");
m = scanner.next();//重新定義回圈條件;輸入N就跳出while
}
scanner.close();//關閉IO
System.out.println("老子寫的計算器牛逼吧!!!");
}
//加減乘除的方法定義
public static int Add(int a, int b) {
return a + b;
}
public static int Sub(int c, int d) {
return c - d;
}
public static int Mul(int e, int f) {
return e * f;
}
public static int Div(int g, int h) {
return g / h;
}
}

- 計算器可以對其資料型別更改為double型別, 讓其除法運算有更高的精度;
- 思路:
- 對加減乘除方法進行撰寫
- 思考利用什么條件來對switch條件進行判斷運算選擇(利用運算子)
- 由于條件需要回圈不斷接收數值, 所以利用while陳述句的判定, 并且在一次回圈結尾重新定義while陳述句的判定,判斷是否再一次進行二元運算
本文來自博客園,作者:Wo_OD,轉載請注明原文鏈接:https://www.cnblogs.com/WoOD-outPut/p/17035921.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/541491.html
標籤:其他
