方法的過載、可變形參的方法、方法的引數值傳遞機制、遞迴方法
一、方法的過載
- 定義:在同一個類中,允許存在一個或以上的同名方法,只要它們的引數個數或者引數型別不同即可.
"兩同一不同" : 同一個類、相同方法名
引數列表不同,引數個數不同,引數型別不同
- 舉例:
Arrays類中過載的sort() / binarySearch()
- 判斷是否是過載:
跟方法的許可權修飾符、返回值型別、形參變數名、方法體都沒有關係!
- 在通過物件呼叫方法時,如何確定某一個指定的方法:
方法名-------->引數列表
package day06;
public class Demo {
public static void main(String[] args) {
Demo demo = new Demo();
demo.getSum(1, 2);
}
//如下的4個方法構成了過載
public void getSum(int i, int j) {
System.out.println("方法一");
}
public void getSum(double d1, double d2) {
System.out.println("方法二");
}
public void getSum(String s, int i) {
System.out.println("方法三");
}
public void getSum(int i, String s) {
System.out.println("方法四");
}
}
二、可變形參的方法
- 可變個數形參的格式: 資料型別 ... 變數名
- 當呼叫可變個數形參的方法時,傳入的引數個數可以是"0個,1個,2個,....
- 可變個數形參的方法與本類中方法名相同,形參不同的方法之間構成過載
- 可變個數形參的方法與本類中方法名相同,形參型別也相同的陣列之間不構成過載-----二者之間不能共存
- 可變個數形參在方法的形參中,必須宣告在末尾
package day06;
/*可變個數形參的方法
*
* 1.JDK 5.0新增的內容
* 2.具體使用:
* 2.1 可變個數形參的格式: 資料型別 ... 變數名
* 2.2 當呼叫可變個數形參的方法時,傳入的引數個數可以是"0個,1個,2個,....
* 2.3 可變個數形參的方法與本類中方法名相同,形參不同的方法之間構成過載
* 2.4 可變個數形參的方法與本類中方法名相同,形參型別也相同的陣列之間不構成過載-----二者之間不能共存
* 2.5 可變個數形參在方法的形參中,必須宣告在末尾
*
* */
public class Demo {
public static void main(String[] args) {
Demo demo = new Demo();
demo.show(12);
demo.show("hello");
demo.show("hello","hello1","hello2");
demo.show();
}
public void show(int i) {
System.out.println(i);
}
public void show(String s) {
System.out.println(s);
}
public void show(String ... str) {
System.out.println("可變個數形參");
}
// public void show(String[] str) {
// System.out.println("可變個數形參");
// }
}
二、變數的值傳遞機制
- 如果變數是基本資料型別,此時賦值的是變數所儲存是資料值
- 如果變數是引用資料型別,此時賦值的是變數所儲存的資料的地址值
package day06;
/*
* 關於變數的賦值:
*
* 如果變數是基本資料型別,此時賦值的是變數所儲存是資料值
* 如果變數是引用資料型別,此時賦值的是變數所儲存的資料的地址值
*
* */
public class Demo {
public static void main(String[] args) {
System.out.println("*********************基本資料型別*********************");
int m = 10;
int n = m;
System.out.println("m =" + m + ",n=" + n);
n = 20;
System.out.println("m =" + m + ",n=" + n);
System.out.println("*********************引用資料型別*********************");
Order o1 = new Order();
o1.orderId = 1001;
Order o2 = o1;//賦值以後,o1和o2的地址值相同,都指向了堆空間中同一個物件實體
System.out.println("o1.orderId =" + o1.orderId + ",o2.orderId =" + o2.orderId);
o2.orderId = 1002;
System.out.println("o1.orderId =" + o1.orderId + ",o2.orderId =" + o2.orderId);
}
}
class Order {
int orderId;
}
三、方法的形參的傳遞機制:基本資料型別
- 如果引數是基本資料型別,此時實參賦給形參的是實參真實儲存的資料值(不是地址值)
package day06;
/*
* 方法的形參的傳遞機制:基本資料型別
*
* 1.形參: 方法定義時,宣告的小括號內的引數
* 實參: 方法呼叫時,實際傳遞給形參的資料
*
* 2.值傳遞機制:
* 如果引數是基本資料型別,此時實參賦給形參的是實參真實儲存的資料值(不是地址值)
* */
public class Demo {
public static void main(String[] args) {
// 交換兩個變數的值的操作
int m = 10;
int n = 20;
System.out.println("m=" + m + ",n=" + n);
//交換
//int temp = m;
//m = n;
//n= temp;
Demo demo = new Demo();
demo.swap(m, n);
//並沒有交換成功
System.out.println("m=" + m + ",n=" + n);
}
//錯誤方法
public void swap(int m,int n) {
int temp = m;
m = n;
n= temp;
}
}
四、方法的形參的傳遞機制:引用資料型別
- 如果引數是引用資料型別,此時實參賦給形參的是是地址值
package day06;
public class Demo {
public static void main(String[] args) {
Data data = new Data();
data.m = 10;
data.n = 20;
System.out.println("m=" + data.m + ",n=" + data.n);
// 交換m和n的值
// int temp = data.m;
// data.m = data.n;
// data.n= temp;
Demo demo = new Demo();
demo.swap(data);
System.out.println("m=" + data.m + ",n=" + data.n);
}
//成功
public void swap(Data data) {
int temp = data.m;
data.m = data.n;
data.n = temp;
}
}
class Data {
int m;
int n;
}
五、遞迴方法
- 遞迴方法:一個方法體內呼叫它自身。
- 方法遞迴包含了一種隱式的迴圈,它會重複執行某段程式碼,但這種重複執行無須迴圈控制。
- 遞迴一定要向已知方向遞迴,否則這種遞迴就變成了無窮遞迴,類似於死迴圈。
package day06;
/*
* 遞迴方法的使用(瞭解)
* 1.遞迴方法:一個方法體內呼叫它自身
* 2.方法遞迴包含了一種隱式的迴圈,它會重複執行某段程式碼,但這種重複執行無需迴圈控制.
* 遞迴一定要向己方向遞迴,否則這種遞迴就變成了無窮遞迴,類似於死迴圈.
*
*
* */
public class Demo {
public static void main(String[] args) {
// 例1:計算1-100之間所有自然數的和
// 方式一:
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
// 方法二:
Demo demo = new Demo();
int sum2 = demo.getSum(100);
System.out.println(sum);
System.out.println(sum2);
}
// 例2:計算1-100之間所有自然數的乘積
public int getSum(int n) {
if (n == 1) {
return 1;
} else {
return n * getSum(n - 1);
}
}
}
相關文章
- JS的方法引數傳遞(按值傳遞)JS
- Java入門第12天 (方法過載 ,方法的引數傳遞)Java
- Java方法04:命令列傳遞引數、可變引數Java命令列
- ABAP 方法呼叫的引數傳遞裡,透過引用傳遞的方式,能修改原始引數值嗎?
- python傳遞實參的方法Python
- GridView傳遞兩個引數的方法View
- php函式引用傳遞引數的方法PHP函式
- Java高頻面試題分享(四)——方法的引數傳遞機制Java面試題
- Javascript 定時器呼叫傳遞引數的方法JavaScript定時器
- Java - 13 方法的遞迴Java遞迴
- Jmeter 跨執行緒組引數傳遞的方法JMeter執行緒
- SSM框架中Mybatis傳遞引數的幾種方法SSM框架MyBatis
- 在 `el-upload` 的事件中傳遞更多引數的方法事件
- 向路由元件傳遞引數2種方法路由元件
- Java的方法可變長引數Java
- [轉]Shell向Perl指令碼中傳遞變數的方法指令碼變數
- 初識遞迴方法遞迴
- Java方法06:遞迴Java遞迴
- js深度繼承的非遞迴方法JS繼承遞迴
- 用遞迴方法求10的階乘遞迴
- 用遞迴的方法列印出輸入的任意整數遞迴
- 用畫小狗的方法來解釋Java中的值傳遞Java
- vuejs傳遞資料的方法有哪些VueJS
- 遞迴函式,可變引數列表遞迴函式
- Java方法05:可變引數Java
- Java中將方法作為引數傳遞5種方式Java
- 方法的形參和實參
- 方法的實參和形參
- Oracle with使用方法以及遞迴Oracle遞迴
- 引數傳遞機制之JWTJWT
- PHP 樹-不需要遞迴的實現方法PHP遞迴
- c# 方法引數(傳值,傳引用,ref,out,params,可選引數,命名引數)C#
- python中用遞迴的方法實現斐波拉契數列Python遞迴
- get方式傳參的以post方法傳的解決方法
- Python的函式引數傳遞:傳值?引用?Python函式
- Java方法03:方法的過載Java
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- C++ 可變引數模板遞迴展開C++遞迴