1. 程式人生 > >Java個人筆記之物件與函式

Java個人筆記之物件與函式


對於面向過程思想,強調的是過程(動作).
對於面向物件思想,強調的是物件(實體)。
特點:
1,面向物件就是一種常見的思想。符合人們的思考習慣。
2,面向物件的出現,將複雜的問題簡單化。
3,面向物件的出現,讓曾經在過程中的執行者,變成了物件中的指揮者。

建構函式:構建創造物件時呼叫的函式。
作用:可以給物件進行初始化。
建立物件都必須要通過建構函式初始化。
建構函式:物件建立時,就會呼叫與之對應的建構函式,對物件進行初始化。
一般函式:物件建立後,需要函式功能時才呼叫。
建構函式:物件建立時,會呼叫只調用一次。
一般函式:物件建立後,可以被呼叫多次。
什麼時候定義建構函式呢?
在描述事物時,該事物一存在就具備的一些內容,這些內容都定義在建構函式中。
建構函式可以有多個,用於對不同的物件進行鍼對性的初始化.
多個建構函式在類中是以過載的形式來體現的。
細節:
1,建構函式如果完成了set功能。set方法是否需要。
2,一般函式不能直接呼叫建構函式。
3,建構函式如果前面加了void就變成了一般函式。
4,建構函式中是有return語句的。

this
當成員變數和區域性變數重名,可以用關鍵字this來區分。
this : 代表物件。代表哪個物件呢?當前物件。
this就是所在函式所屬物件的引用。
簡單說:哪個物件呼叫了this所在的函式,this就代表哪個物件。
this也可以用於在建構函式中呼叫其他建構函式。(一般函式調用不了)
**注意:**只能定義在建構函式的第一行。(因為初始化動作要先執行)

class Person
{
	private String name;
	private int age;	
	Person()
	{		
		name = "baby";
		age = 1;
		System.out.println("person run");
	}	
	Person(String name)	
	{
		this();//**呼叫Person();建構函式**二次初始化
		this.name = name;
	}
	Person(String name,int age)
	{
		this.name = name;
		this.age = age;		
	}
	/*
	判斷是否是同齡人。
	*/
	public boolean compare(Person p)
	{
		/*
		if(this.age == p.age)
			return true;
		else
			return false;
		*/
		return this.age==p.age;
	}`
}

static
特點:
1,static是一個修飾符,用於修飾成員。
2,static修飾的成員被所有的物件所共享。
3,static優先於物件存在,因為static的成員隨著類的載入就已經存在了。
4,static修飾的成員多了一種呼叫方式,就可以直接被類名所呼叫 。 類名.靜態成員 。
5,static修飾的資料是共享資料,物件中的儲存的是特有資料。
成員變數和靜態變數的區別?
1,兩個變數的生命週期不同。
成員變數隨著物件的建立而存在,隨著物件的被回收而釋放。
靜態變數隨著類的載入而存在,隨著類的消失而消失。

2,呼叫方式不同。
成員變數只能被物件呼叫。
靜態變數可以被物件呼叫,還可以被類名呼叫。

3,別名不同。
成員變數也稱為例項變數。
靜態變數稱為類變數。

4,資料儲存位置不同。
成員變數資料儲存在堆記憶體的物件中,所以也叫物件的特有資料.
靜態變數資料儲存在方法區(共享資料區)的靜態區,所以也叫物件的共享資料.

靜態使用的注意事項:
1,靜態方法只能訪問靜態成員。(非靜態既可以訪問靜態,又可以訪問非靜態)
2,靜態方法中不可以使用this或者super關鍵字。
3,主函式是靜態的。

靜態什麼時候用?
1,靜態變數。
當分析物件中所具備的成員變數的值都是相同的 。
這時這個成員就可以被靜態修飾。
只要資料在物件中都是不同的,就是物件的特有資料,必須儲存在物件中,是非靜態的。
如果是相同的資料,物件不需要做修改,只需要使用即可,不需要儲存在物件中,定義成靜態的。

2,靜態函式。
函式是否用靜態修飾,就參考一點,就是該函式功能是否有訪問到物件中的特有資料。
簡單點說,從原始碼看,該功能是否需要訪問非靜態的成員變數,如果需要,該功能就是非靜態的。
如果不需要,就可以將該功能定義成靜態的。當然,也可以定義成非靜態,
但是非靜態需要被物件呼叫,而僅建立物件呼叫非靜態的
沒有訪問特有資料的方法,該物件的建立是沒有意義。

靜態程式碼塊。
隨著類的載入而執行。而且只執行一次。
作用:
用於給類進行初始化。

 class Person
    {
    	private String name;
    	{//構造程式碼塊。可以給所有物件進行初始化的。
    		System.out.println("constructor code ");
    //		cry();
    	}
	
static //用於給類進行初始化。
{
	name= "sd";//初始時可以操作多次name
	System.out.println("hahahah");
}

	Person()//是給對應的物件進行鍼對性的初始化。 
	{
		name = "baby";
//		cry();
	}
	Person(String name)
	{
		this.name  = name;
//		cry();
	}
	static void show()
	{
		System.out.println("show run");
	}
	public void cry()
	{
		System.out.println("哇哇");
		
	}
}