歡迎訪問我的個人網站:http://www.qingshuimonk.com/
1. 方法的語句結構:
修飾符 返回值類型 方法名 (參數列表){
//方法體;
}
1) 修飾符,返回值類型,方法名和參數構成方法頭,其中修飾符可選。
2) 對於有返回值的方法,返回值類型就是要返回的值得數據類型,無返回值方法返回值關鍵字爲void。
3) 參數列表,實參,形參等概念同C相同。
4) PS:在其他一些語言中,方法稱爲過程或者函數。返回值非空的方法稱爲函數,返回值爲空的方法稱爲過程。
5) 在方法中可使用”return”來控制流程。
2. 調用方法:兩種辦法
Eg: 1) int larger = max(3 , 4);
2) System.out.println(max(3 , 4));
3. 調用堆棧,參數傳遞等內容同C。
4. 重載:在JAVA中,兩個方法可以具有相同的名稱但是具有不同的參數列表。JAVA編譯器能根據方法頭標誌決定調用哪個方法。
a) 在調用方法時,JAVA編譯器自動尋找最合適的匹配方法。
b) 被重載的方法必須具有不同的參數列表,不能基於不同的修飾符或返回值類型重載方法。
c) 若一個方法調用會有兩個或更多可能的匹配,編譯器無法判斷哪個更合適,則出現歧義調用。歧義調用是編譯錯誤。
5. 局部變量的作用域:局部變量的作用域是從該變量的說明開始到包含該變量的體結束爲止,局部變量必須先聲明後使用。
a) 形參實際上是一個局部變量。一個方法中形參的作用域覆蓋整個方法。
b) 當局部變量和全局變量同名時,在局部變量作用範圍內,全局變量失效。
6. 方法抽象:方法抽象是把方法的應用同實現分離開來。在不知道方法如何實現的情況下,用戶也可以使用方法。方法的實現封裝在方法體內,對使用該方法的用戶來說是看不見的。這就稱爲信息的隱藏或封裝。
7. 遞歸:函數直接或者間接調用自己的過程。將方法分爲子問題,子問題又分爲子問題(產生遞歸),要使遞歸方法終止,問題必須達到一種終止條件(流程控制)。當終止條件達到時,方法將結果返回給調用者(調用完成)。
8. 包:包用於對類進行組織。使用包有四個理由:
a) 查找定位類:功能相似的類可以放在同一個包中以便查找定位。
b) 避免命名衝突:當開發的可重用類被其他程序員共享時,命名衝突時有發生。爲了防止類似的情況發生,可將類放入包中,通過類名來引用。
c) 便於發佈軟件:包將相關的類組織到一起,這樣可以很容易被分發。
d) 保護類:包可以提供對類的保護,允許同一個包中的類訪問類中被保護的成員,而外部類則無此權限。
9. 包的命名習慣:包是有層次關係的,包中還可以有包,eg:java.lang.Math表示Math是lang中的一個包,而lang是java的一個包。包嵌套的層次可以用來保證包名的唯一性。
10. Java語言簡易以設計者的internet域名的倒敘作爲包的前綴。由於internet的域名是唯一的,所以這樣避免了命名衝突。
a) 一個包實際上是包含類的字節碼的目錄。
b) Java中每個類都屬於一個包,類在編譯時添加到包中。要把一個類放在指定包中,只需在程序最前端(前面只能有註釋和空格)加上下列語句:
pakege packgename;
c) 使用包中的類:1.使用類的全稱,2.import語句:import javax.swing.*;(使用*的導入稱爲按需導入,也可導入包中指定的類)。除非導入包中的類在程序中使用,否則該類的信息在編譯和運行時並不被讀取。
11. 漢諾塔程序:
import javax.swing.JOptionPane;
public class Hanoi {
/**Main method*/
public static void main(String[] args){
//read number of disks,n
String intString = JOptionPane.showInputDialog(
"Enter number of disks:");
//convert string into integer
int disk = Integer.parseInt(intString);
//find the solution recursively
System.out.println("The moves are:");
moveDisks(disk, 'A', 'B', 'C');
}
/**The method for finding the solution to move n disks from
fromTower to toTower with auxTower*/
public static void moveDisks(int n, char fromTower, char toTower, char auxTower){
if (n == 1)//Stopping condition
System.out.println("Move disk " + n + " from " + fromTower + " to " + toTower);
else{
moveDisks(n-1, fromTower, auxTower, toTower);
System.out.println("Move disk " + n + " from " + fromTower + " to " + toTower);
moveDisks(n - 1, auxTower,toTower,fromTower);
}
}
}