Java開發--8--面向對象(下)

6.3 方法

1、理論基礎

方法的定義:方法是解決一類問題的步驟的有序組合,其包含於類或對象中,它在程序中被創建,在其他地方被引用。

方法的優點:使程序變得更簡短而清晰。有利於程序維護。可以提高程序開發的效率。提高了代碼的重用性。

方法的命名規則:方法的名字的第一個單詞應以小寫字母作爲開頭,後面的單詞則用大寫字母開頭寫,不使用連接符。下劃線可能出現在 JUnit 測試方法名稱中,用以分隔名稱的邏輯組件。一個典型的模式是:test<MethodUnderTest>_<state>。例如testPop_emptyStack

2、定義類的方法

類中除了定義成員變量,還可以定義方法,用於描述對象的行爲,封裝對象的功能。

定義類中的方法:

class 類名{
	修飾詞  返回值類型  方法名稱([參數列表]){
		方法體…………            //方法寫法不變
	}           //如果有其餘代碼的話下方寫入其餘代碼
}

方法的所有部分:

修飾符:修飾符,這是可選的,告訴編譯器如何調用該方法。定義了該方法的訪問類型。

返回值類型:方法可能會返回值。returnValueType 是方法返回值的數據類型。有些方法執行所需的操作,但沒有返回值。在這種情況下,returnValueType 是關鍵字void。

方法名:是方法的實際名稱。方法名和參數表共同構成方法簽名。

參數類型:參數像是一個佔位符。當方法被調用時,傳遞值給參數。這個值被稱爲實參或變量。參數列表是指方法的參數類型、順序和參數的個數。參數是可選的,方法可以不包含任何參數。

方法體:方法體包含具體的語句,定義該方法的功能。

代碼實例:

public static int age(int birthday){
	...
}

代碼實例:

public static int max(int num1, int num2) {      //返回兩個整型變量數據的較大值
	int result;
	if (num1 > num2)
		result = num1;
	else
		result = num2;
	return result;          //有返回值方法中必須要寫的。即return
}                               //此處只能返回int型

3、方法調用代碼實例

public class TestMax {
	public static void main(String[] args) {      //主方法
		int i = 5;
		int j = 2;
		int k = max(i, j);         //調用
		System.out.println( i + " 和 " + j + " 比較,最大值是:" + k);
	}        //輸出結果:5和2比較,最大的是:5
	
	public static int max(int num1, int num2) {      //返回兩個整數變量較大的值
		int result;
		if (num1 > num2)
			result = num1;
		else
			result = num2;
		return result;
	}
	
    //創建一個有相同名字但參數不同的方法。
    //當傳入int型參數時int型的max方法就會被調用,
    //當傳入double型參數時double型的max方法就會被調用。
    //這就叫做方法重載。
    //該代碼段中的double,如果僅有此處不同,則不算是重載
	public static double max(double num1, double num2) {
		if (num1 > num2)
			return num1;
		else
			return num2;
		return result;
	}
}

4、方法簽名(方法重載)

方法的簽名包含如下兩個方面:方法名和參數列表

一個類中,不可以有兩個方法的簽名完全相同,即一個類中不可以有兩個方法的方法名和參數列表都

完全相同。而如果一個類的兩個方法只是方法名相同而參數列表不同,是可以的。

簽名=方法名+參數列表(包括參數個數以及參數類型)

編譯錯誤代碼實例:

public class Cashier{
	//完全一樣,編譯錯誤
	public boolean pay(double money){
		……
	}
	public boolean pay(double money){
		……
	}
}

編譯正確代碼實例:

public class Cashier{
	//方法名相同參數列表不同,編譯正確
	public boolean pay(double money){
		……
	}
	
	//方法名稱相同,參數列表不同,稱之爲方法的重載
	public boolean pay(String cardId,String cardPwd){
		……
	}
}        

編譯器在編譯時會根據簽名來綁定調用不同的方法,可以把重載的方法看成是完全不同的方法,只不過恰好方法名相同而已。

Aoo o = new Aoo();             //創建對象
o.say();             //調用第一個方法
o.say("wkj");            //調用第二個方法
o.say("wkj",36);           //調用第三個方法
o.say(18,"wkj");          //調用第四個方法
class Aoo{                 //方法重載調用自動匹配
	void say(){}             //第一個方法
	void say(String name){}              //第二個方法
	void say(String name,int age){}             //第三個方法
	void say(int age,String name){}           //第四個方法
	//int say(){return 5;}             //編譯錯誤,和第一個方法相同
	//void say(String name1){}         //編譯錯誤,和第二個方法相同
}

5、構造方法

主要功能是爲類中的屬性初始化。

一個對象被創建時,使用構造方法初始化該對象。構造方法和它所在類的名字相同,但沒有返回值。通常使用構造方法給一個類的實例變量賦初值,或者執行其它必要的步驟來創建一個完整的對象。如果沒有自定義構造方法,Java將提供一個默認構造方法,它把所有成員初始化爲0。

構造方法是在類中定義的方法,不同於其他的方法,構造方法的定義有兩點規則:

1、構造方法的名稱必須與類名相同。
2、構造方法沒有返回值,也不能寫void。構造方法也可以重載。

[訪問修飾符] 類名(){
	構造方法體;
}

代碼實例:

class MyClass {        //一個簡單的構造函數,少了返回值類型
	int x;
	MyClass(int i) {     //以下是構造函數,方法名和類名相同
		x = i;
	}
}

6、this關鍵字

this關鍵字在方法體中,用於指向調用該方法的當前對象。即哪個對象調用方法,this指的就是哪個對象。嚴格來講在方法中需要通過this關鍵字指明當前對象。

使用場景:

1、表示當前對象。
2、調用本類中的構造方法。
3、表示類中的屬性和構造方法。

構造方法常用於實現對象成員變量的初始化:

class Cell{
	int row;
	int col;
	public Cell (int row,int col){        //兩個參數
		this.row = row;           //通過this關鍵字來區分成員變量和參數
		this.col = col;           //將col賦給當前類的
	}
}
	
class TestCell{
	public static void main(String args[]){
		Cell c1 = new Cell(15,6);     //傳入參數
		printCell(c1);        //c1.row=15並c1.col=6
	}
}

7、參數傳遞

參數傳遞一般有兩種,一種是傳值,另一種是傳地址。傳值是指在調用方法時,把參數的值直接傳遞給方法,傳地址則是給方法提供參數的地址。

代碼實例:基本數據類型的參數傳遞

public class ParamTransfer{
	public int money;
	void amethod(int i){
		//注意對比形參i和money的值的變化
		System.out.println("方法得到的i的值爲:"+i);       //輸出:100
		i = i * 5;
		System.out.println("方法執行語句i=i*5後i的值爲:"+i);   //輸出:500
		System.out.println("money的值爲:"+this.money);    //輸出:100
	}
	
	public static void main(String[] args){
		ParamTransfer pt=new ParamTransfer();
		pt.money=100;
		pt.amethod(pt.money);      //把money作爲參數傳遞給方法
	}
}

6.4 Java時間和日期

1、使用printf格式化日期

printf方法可以很輕鬆地格式化時間和日期。使用兩個字母格式。它以%t開頭並且以下面表格中的一個字母結尾。

轉換符 說明 示例
c 包括全部日期和時間信息 星期六 十月 27 14:21:20 CST 2007
F “年-月-日” 格式 2007-10-27
D “月/日/年” 格式 10/27/07
r “HH:MM:SS PM” 格式(12時制) 02:25:51 下午
T “HH:MM:SS” 格式(24時制) 14:28:16
R “HH:MM” 格式(24時制) 14:28

代碼實例:

import java.util.Date;
public class DateDemo {
	public static void main(String args[]) {
        //初始化Date對象
		Date date = new Date();

      	// c的使用。輸出結果:全部日期和時間信息:星期一 九月 10 10:43:36 CST 2012
		System.out.printf("全部日期和時間信息:%tc%n",date);

        // f的使用。輸出結果:年-月-日格式:2012-09-10
		System.out.printf("年-月-日格式:%tF%n",date);

        // d的使用。輸出結果:月/日/年格式:09/10/12
		System.out.printf("月/日/年格式:%tD%n",date);

       	// r的使用。輸出結果:HH:MM:SS PM格式(12時制):10:43:36 上午
		System.out.printf("HH:MM:SS PM格式(12時制):%tr%n",date);

        // t的使用。輸出結果:HH:MM:SS格式(24時制):10:43:36
		System.out.printf("HH:MM:SS格式(24時制):%tT%n",date);

       	// R的使用。輸出結果:HH:MM格式(24時制):10:43
		System.out.printf("HH:MM格式(24時制):%tR",date);
	}
}

2、Java休眠:sleep

sleep()使當前線程進入停滯狀態,讓出CPU的使用。

代碼實例:

try { 
	System.out.println(new Date( ) + "\n"); 
	Thread.sleep(1000*3);              //休眠3秒
	System.out.println(new Date( ) + "\n"); 
} catch (Exception e) { 
	System.out.println("Got an exception!"); 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章