Java方法01
1.什么是方法?
-
Java是陳述句的集合,它們在一起執行一個功能
-
方法是解決一類問題的步驟的有序集合
-
方法包含于類或者物件中
-
方法在程式中被創建,在其他地方被參考
-
-
設計方法的原則:方法的本意是功能塊,就是實作某個功能的陳述句塊的集合,我們設計方法的時候,最好保持方法的原子性,就是一個方法只完成一個功能,這樣利于我們后期拓展,
-
方法的命名規則:首字母小寫和駝峰原則:除了第一個單詞外,之后的單詞首字母大寫
2.方法的定義和呼叫
2.1方法的定義
-
Java的方法類似其他語言的函式,是一段用來完成特定功能的代碼片段,一般情況下,定義一個方法包括以下語法:
-
方法包含一個方法頭和一個方法體,下面是一個方法的所有部分:
- 修飾符:修飾符,這是可選的,告訴編譯器如何呼叫該方法,定義了該方法的訪問型別,
- 回傳值型別:方法可能會回傳值,returnValueType是方法回傳值的資料型別,有些方法執行所需操作,但沒有回傳值, 這種情況下returnValueType是關鍵字void
- 方法名:是方法的實際名稱,方法名和引數表共同構成方法簽名,
- 引數型別:引數像是一個占位符,當方法被呼叫時,傳遞值給引數,這個值被稱為實參或者變數,引數串列是指方法的引數型別、順序和引數的個數,引數是可選的,方法也可以不包含任何引數,
- 形式引數:在方法被呼叫時用于接收外界輸入的資料,
- 實參:呼叫方法時實際傳給方法的資料,
- 方法體:方法體包含具體的陳述句,定義該方法的功能,
-
語法:
修飾符 回傳值型別 方法名(引數型別 引數名){
...
方法體
...
return 回傳值;
}
例子:
```java
package li.bolog.method;
public class Demo02 {
public static void main(String[] args) {
int max=max(20,20);
System.out.println(max);
}
//比大小
public static int max(int num1,int num2){
int result=0;
if(num1==num2){
return 0; //return 除了可以回傳值以外還可以終止方法
}
if (num1>num2) {
result=num1;
} else{
result=num2;
}
return result;
}
}
```
2.3方法呼叫
-
呼叫方法:物件名.方法名(實參串列)
-
Java支持兩種呼叫方法的方式,根據方法是否回傳值來選擇
-
當方法回傳一個值的時候,方法呼叫通常被當成一個值,例如:
int largr = max(30,40); -
如果方法回傳值是void,那么方法呼叫一定是一條陳述句,
System.out.println("Hello"); -
拓展了解:值傳遞 和 參考傳遞(PS:Java都是值傳遞)
? 為什么說java里面只有值傳遞?_Forward233的博客-CSDN博客
3.方法的多載
-
多載就是在一個類中,有相同的函式名稱,但形參不同的函式
-
方法的多載規則:
- 方法名稱必須相同
- 引數串列可以不同(個數不同、型別不同、引數排列順序不同等)
- 方法的回傳型別可以相同也可以不相同
- 僅僅回傳型別不同不足以成為方法的多載
-
實作理論:方法名稱相同時,編譯器會根據呼叫方法的引數個數、引數型別等去逐個匹配,以選擇對應的方法,如果匹配失敗則編譯器報錯,
重寫:重寫是垂直關系,是子類和父類之間的關系
多載:多載是水平關系,是同一個類中方法之間的關系
package li.bolog.method;
public class Demo01 {
public static void main(String[] args) {
int sum= add(1,2);
int sum2=add(2,3,4);
System.out.println(sum);
System.out.println(sum2);
}
//加法
public static int add(int a,int b){
return a+b;
}
public static int add(int a,int b,int c){
return a+b+c;
}
}
4.命令列傳參
有時你希望運行一個程式時再給它傳遞訊息,這就要靠傳遞命令列引數給main()函式實作
在IDEA中撰寫如下程式:
package li.bolog.method;
public class Demo03 {
public static void main(String[] args) {
//args.length 陣列長度
for (int i = 0; i < args.length; i++) {
System.out.println("args"+"["+i+"]"+args[i]);
}
}
}
打開命令視窗,在程式所在的目錄下編譯生成.class檔案,然后輸入java命令運行程式,這時候我們可以發現系統提示找不到主類
這時候候應該退回 src/ 目錄下去運行
D:\IDEA-workspace\722practice\src\li\bolog\method> cd ../
D:\IDEA-workspace\722practice\src\li\bolog> cd ../
D:\IDEA-workspace\722practice\src\li> cd ../
D:\IDEA-workspace\722practice\src> java li.bolog.method.Demo03
D:\IDEA-workspace\722practice\src> java li.bolog.method.Demo03 This is me
args[0]This
args[1]is
args[2]me
5.可變引數(不定項引數)
- 從JDK1.5開始,Java支持傳遞同型別的可變引數給一個方法
- 在方法宣告中,在指定引數型別后面加一個省略號(…)
- 一個方法中只能指定一個可變引數,它必須是方法的最后一個引數,任何普通的引數必須在它之前宣告
可變長引數的應用:
package li.bolog.method;
public class Demo04 {
public static void main(String[] args) {
printMax(2,9,55,7,8,56.7,-89);
printMax(new double[]{1,45,7,-9,77});
}
public static void printMax(double...numbers){
if(numbers.length==0){
System.out.println("No argument passed");
return;
}
double result = numbers[0];
//排序
for (int i = 1; i < numbers.length; i++) {
if(numbers[i]>result){
result = numbers[i];
}
}
System.out.println("The max value is"+result);
}
}
6.遞回
-
A方法呼叫B方法,我們很容易理解,
遞回就是:A方法呼叫A方法,就是自己呼叫自己,
-
利用遞回可以用簡單程式的程式來解決一些復雜的問題,它通常把一個大型的復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞回策略只需少量的程式就可以描述出解題程序所需要的多次重復計算,大大減少了程式的代碼量,遞回的能力在于用有限的陳述句定義物件的無限集合,
-
遞回結構包括兩個部分:
- 遞回頭(遞回邊界):什么時候不呼叫自身方法,如果沒有頭,就會陷入死回圈,
- 遞回體:什么時候需要呼叫自身方法
package li.bolog.method;
public class Demo05 {
public static void main(String[] args) {
System.out.println(f(5));
}
//遞回來解決階乘
//5!
public static int f(int n){
if(n==1){
return 1;
}else{
return n*f(n-1);
}
}
}
7.鞏固練習
寫一個計算器,要求實作加減乘除功能,并且能夠回圈接收新的資料,通過用戶互動實作,
- 思路推薦
- 寫四個方法:加減乘除
- 利用回圈+switch進行用戶互動
- 傳遞需要操作的兩個數
- 輸出結果
package li.bolog.method;
import java.util.Scanner;
public class CalculatorDemo {
public static void main(String[] args) {
/*
寫一個計算器,要求實作加減乘除功能,并且能夠回圈接收新的資料,通過用戶互動實作,
- 思路推薦
- 寫四個方法:加減乘除
- 利用回圈+switch進行用戶互動
- 傳遞需要操作的兩個數
- 輸出結果
* */
Scanner scanner = new Scanner(System.in);
double a = 0 ;
double b = 0 ;
String c =" " ;
for (int i = 0; i < 999; i++) {
System.out.println("請輸入第一個數:");
a = scanner.nextDouble();
System.out.println("請輸入運算子號:");
c = scanner.next();
System.out.println("請輸入第二個數:");
b = scanner.nextDouble();
switch(c){
case "+" :
System.out.println("運算結果為:"+a+"+"+b+"="+add(a,b));break;
case "-" :
System.out.println("運算結果為:"+a+"-"+b+"="+subtract(a,b));break;
case "*" :
System.out.println("運算結果為:"+a+"*"+b+"="+multiply(a,b));break;
case "/" :
System.out.println("運算結果為:"+a+"/"+b+"="+divide(a,b));break;
default:
System.out.println("請輸入正確的運算子號!");
}
}
scanner.close();
}
//加
public static double add(double a,double b){return a+b;}
//減
public static double subtract(double a,double b){return a-b;}
//乘
public static double multiply(double a,double b){return a*b;}
//除
public static double divide(double a,double b){
if(a*b==0) {System.out.println("被除數或者除數不能為0!");return 0;}
else return a/b;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/500373.html
標籤:其他
