Java实验方法参数传递与递归_4.3类的结构之二:方法(return,重载,可变个数形参,值传递,递归)...
類的設計中,兩個重要結構之二:方法
* 方法:描述類應該具有的功能。
* 比如:Math類:sqrt()\random()\ ..
* Scanner類:nextXxx() ..
* Arrays類:sort()\binarySearch()\toString()\equals()\..
*
* 1.舉例:
* public void eat(){}
* public void sleep(int hour){}
* public String getName(){}
* public String getNation(String nation){}
*
*
* 2.方法的聲明:權限修飾符 返回值類型 方法名(形參列表){
* 方法體
* }
*
* 3.說明:
* 3.1關于權限修飾符:默認方法的權限修飾符為public
* Java規定的4種權限修飾符 public,private,缺省,protected
*
* 3.2返回值類型:有返回值 vs 沒有返回值
* 3.2.1如果方法有返回值,則必須在方法聲明時,指定返回值的類型、同時、方法中,
* 需要使用return關鍵字來返回指定類型的變量或常量。"return 數據"
* 如果方法沒有返回值,則方法聲明時,使用void來表示。通常,沒有返回值的方法中,
* 就使用return。但是,如果使用的話,只能"return;"表示結束此方法的意思
*
* 3.2.2我們定義方法該不該有返回值?
* ①題目要求
* ②憑經驗,具體問題具體分析
*
* 3.3方法名:屬于標識符,遵循標識符的規則和規范:“見名知意”
*
* 3.4形參列表:方法可以聲明0個,1個,或多個形參。
* 3.4.1格式:數據類型1 形參1, 數據類型2 形參2,......
* 3.4.2我們定義方法時,該不該定義形參?
* ①題目要求
* ②憑經驗,具體問題具體分析
*
* 3.5方法體:方法功能的體現。
* 4.方法的使用中,可以調用當前類的屬性或方法
* 特殊的:方法A中又調用了方法A :遞歸方法
* 方法中,不可以定義方法
return關鍵字:
1.使用范圍:使用在方法體中
2.作用:
①結束方法
②針對于有返回值類型的方法,使用“return 數據”方法返回所要的數據
3.注意點:return關鍵字后面不可以聲明執行語句。
1.方法的重載的概念
在同一個類中,允許存在一個以上的同名方法,只要它們的參數個數或者參數類型不同即可
總結:
"兩同一不同”:同一個類、相同方法名
參數列表不同:參數個數不同,參數類型不同
2.
構成重載的舉例:
舉例一:Arrays類中重載的sort()/binarySearch();printStream中的println()
舉例二:
//如下的4個方法構成了重載
public void getSum(int i, int j) {
System.out.println("1");
}
public void getSum(double d1, double d2) {
System.out.println("2");
}
public void getSum(String s, int i) {
System.out.println("3");
}
public void getSum(int i, String s) {
System.out.println("4");
}
/*public int getSum(int i,int j){
return 0;
}*/
不構成重載的舉例:
//如下三個方法不構成重載
/*public int getSum(int i,int j){
return 0;
}
public void getSum(int m,int n){
}
private void getSum(int i,int j){
}
*/
3.如何判斷是否構成方法的重載?
嚴格按照定義判斷:兩同一不同。
跟方法的權限修飾符、返回值類型、形參變量名、方法體都沒有關系!
4.如何確定類中某一個方法的調用:
方法名 -----> 參數列表
面試題:方法的重載與重寫的區別?
沒有關系
throws\throw
String\StringBuffer\StringBuilder
Collection\Collectons
final\finally\finalize
...
抽象類、接口
sleep() /wait()
1.使用說明:
* 1.jdk 5.0新增的內容
* 2.具體使用:
*? 2.1 可變個數形參的格式:數據類型 ... 變量名
*? 2.2 當調用可變個數形參的方法時,傳入的參數個數可以是:0個,1個,2個,....
*? 2.3 可變個數形參的方法與本類中方法名相同,形參不同的方法之間構成重載
*? 2.4 可變個數形參的方法與本類中方法名相同,形參類型也相同的數組之間不構成重載。(二者不能共存)
*? 2.5 可變個數形參在方法的形參中,必須聲明在末尾
*? 2.6 可變個數形參在方法的形參中,最多只能聲明一個可變形參。
2.舉例說明:
public void show(int i){
}
public void show(String s){
System.out.println("show(String)");
}
public void show(String ... strs){
System.out.println("show(String ... strs)");
for(int i=0;i
System.out.println(strs[i]);
}
}
//不能與上一個方法同時存在。
/*public void show(String[] strs){
System.out.println("show(String ... strs)");
}*/
調用時:
test.show(12);
test.show("hello");
/*test.show("hello","world");
test.show();*/
test.show("AA","BB","CC");
test.show(new String[]{"AA","BB","CC"});
1.針對于方法內變量的賦值舉例:
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("*****************");
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);
規則:
* 如果變量是基本數據類型,此時賦值的是變量所保存的數據值。
* 如果變量是引用數據類型,此時賦值的是變量所保存的數據的地址值。
2.針對于方法的參數概念
形參:方法定義時,聲明的小括號內的參數
實參:方法調用時,實際傳遞給形參的數據
3.java中參數傳遞機制:值傳遞
規則:
* 如果參數是基本數據類型,此時實參賦給形參的是實參真實存儲的數據值。
* 如果參數是引用數據類型,此時實參賦給形參的是實參存儲數據的地址值。
推廣:
* 如果變量是基本數據類型,此時賦值的是變量所保存的數據值。
* 如果變量是引用數據類型,此時賦值的是變量所保存的數據的地址值。
4.典型例題與內存解析:
【例題1】
【例題2】
1.定義:
遞歸方法:一個方法體內調用它自身。
2.如何理解遞歸方法?
>方法遞歸包含了一種隱式的循環,它會重復執行某段代碼,但這種重復執行無須循環控制。
>遞歸一定要向已知方向遞歸,否則這種遞歸就變成了無窮遞歸,類似于死循環。
3.舉例
//例1:計算1-100之間所有自然數的和
public int getSum(int n) {
if (n == 1) {
return 1;
} else {
return n + getSum(n - 1);
}
}
//例2:計算1-100之間所有自然數的乘積
public int getSum1(int n) {
if (n == 1) {
return 1;
} else {
return n * getSum1(n - 1);
}
}
//例3:已知有一個數列:f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n),
//其中n是大于0的整數,求f(10)的值
public int f(int n) {
if (n == 0) {
return 1;
} else if (n == 1) {
return 4;
} else {
//? ? ? ? ? ? return f(n+2)-2*f(n+1);
return 2 * f(n - 1) + f(n - 2);
}
}
//例4.斐波那契數列1 1 2 3 5 8 13 21 34 55
//例5.漢諾塔問題
//例6.快排
總結
以上是生活随笔為你收集整理的Java实验方法参数传递与递归_4.3类的结构之二:方法(return,重载,可变个数形参,值传递,递归)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python同步应用:多个线程有序执行
- 下一篇: java点击按钮结线程_多线程的Java