JAVA學習筆記(3)方法
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);
}
}
}