方法的過載、可變形參的方法、方法的引數值傳遞機制、遞迴方法
一、方法的過載
- 定義:在同一個類中,允許存在一個或以上的同名方法,只要它們的引數個數或者引數型別不同即可.
"兩同一不同" : 同一個類、相同方法名
引數列表不同,引數個數不同,引數型別不同
- 舉例:
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 方法呼叫的引數傳遞裡,透過引用傳遞的方式,能修改原始引數值嗎?
- Java高頻面試題分享(四)——方法的引數傳遞機制Java面試題
- python傳遞實參的方法Python
- php函式引用傳遞引數的方法PHP函式
- GridView傳遞兩個引數的方法View
- golang 方法作為引數傳遞Golang
- Rails--方法間透過session傳遞引數AISession
- Javascript 定時器呼叫傳遞引數的方法JavaScript定時器
- require方法接受以下幾種引數的傳遞:UI
- Java中方法引數傳遞詳析Java
- SSM框架中Mybatis傳遞引數的幾種方法SSM框架MyBatis
- 向路由元件傳遞引數2種方法路由元件
- setTimeout()方法傳遞超過兩個引數介紹
- java方法中只有值傳遞,沒有引用傳遞Java
- angularjs中ajax請求時傳遞引數的方法AngularJS
- python中函式引數傳遞的幾種方法Python函式
- [轉]Shell向Perl指令碼中傳遞變數的方法指令碼變數
- Java的方法可變長引數Java
- mybatis 傳遞多個引數 --解決mybatis查詢使用多個引數方法--javabean傳統方法和map方法MyBatisJavaBean
- 不用遞迴實現樹形結構的一種方法遞迴
- PHP CURL中傳遞cookie的方法PHPCookie
- js深度繼承的非遞迴方法JS繼承遞迴
- C# 中傳遞引數到執行緒的 N 個方法C#執行緒
- 遞迴函式,可變引數列表遞迴函式
- 獲取url傳遞傳遞的某個引數的值
- 【PL/SQL】使用變數傳遞方法生成表更名的SQL語句SQL變數
- 用畫小狗的方法來解釋Java中的值傳遞Java
- 引數傳遞機制之JWTJWT
- Oracle with使用方法以及遞迴Oracle遞迴
- Java遍歷資料夾的兩種方法(非遞迴和遞迴)Java遞迴
- url傳遞的引數值編碼
- 獲取url傳遞的引數值
- vuejs傳遞資料的方法有哪些VueJS
- Android資料傳遞的四種方法Android
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go