- 構造函數:構建創造對象時調用的函數。
- 作用:可以給對象進行初始化。
1.創建對象都必須要通過構造函數初始化。
2.一個類中如果沒有定義過構造函數,那么該類中會有一個默認的空參數構造函數。
3.如果在類中定義了指定的構造函數,那么類中的默認構造函數就沒有了。
- 一般函數和構造函數什么區別呢?
1.構造函數:對象創建時,就會調用與之對應的構造函數,對對象進行初始化。
2.一般函數:對象創建后,需要函數功能時才調用。
3.構造函數:對象創建時,會調用只調用一次。
4.一般函數:對象創建后,可以被調用多次。
- 什么時候定義構造函數呢?
1.在描述事物時,該事物一存在就具備的一些內容,這些內容都定義在構造函數中。
2.構造函數可以有多個,用于對不同的對象進行針對性的初始化.
3.多個構造函數在類中是以重載的形式來體現的。
- 細節:
1,構造函數如果完成了set功能。set方法是否需要。
2,一般函數不能直接調用構造函數。
3,構造函數如果前面加了void就變成了一般函數。
4,構造函數中是有return語句的。
當成員變量和局部變量重名,可以用關鍵字this來區分。
this : 代表對象。代表哪個對象呢?當前對象。
this就是所在函數所屬對象的引用。
簡單說:哪個對象調用了this所在的函數,this就代表哪個對象。
/*
判斷是否是同齡人。
*/
public boolean compare(Person p)
{
/*
if(this.age==p.age)
return true;
else
return false;
*/
return this.age==p.age;
}
this也可以用于在構造函數中調用其他構造函數。
注意:只能定義在構造函數的第一行。因為初始化動作要先執行。
圖示:
static的特點:
1,static是一個修飾符,用于修飾成員。
2,static修飾的成員被所有的對象所共享。
3,static優先于對象存在,因為static的成員隨著類的加載就已經存在了。
4,static修飾的成員多了一種調用方式,就可以直接被類名所調用 。 類名.靜態成員 。
5,static修飾的數據是共享數據,對象中的存儲的是特有數據。
成員變量和靜態變量的區別?
1,兩個變量的生命周期不同。
成員變量隨著對象的創建而存在,隨著對象的被回收而釋放。
靜態變量隨著類的加載而存在,隨著類的消失而消失。
2,調用方式不同。
成員變量只能被對象調用。
靜態變量可以被對象調用,還可以被類名調用。
3,別名不同。
成員變量也稱為實例變量。
靜態變量稱為類變量。
4,數據存儲位置不同。
成員變量數據存儲在堆內存的對象中,所以也叫對象的特有數據.
靜態變量數據存儲在方法區(共享數據區)的靜態區,所以也叫對象的共享數據.
靜態使用的注意事項:
1,靜態方法只能訪問靜態成員。(非靜態既可以訪問靜態,又可以訪問非靜態)
2,靜態方法中不可以使用this或者super關鍵字。
3,主函數是靜態的。
靜態什么時候用?
1,靜態變量。
當分析對象中所具備的成員變量的值都是相同的 。
這時這個成員就可以被靜態修飾。
只要數據在對象中都是不同的,就是對象的特有數據,必須存儲在對象中,是非靜態的。
如果是相同的數據,對象不需要做修改,只需要使用即可,不需要存儲在對象中,定義成靜態的。
2,靜態函數。
函數是否用靜態修飾,就參考一點,就是該函數功能是否有訪問到對象中的特有數據。
簡單點說,從源代碼看,該功能是否需要訪問非靜態的成員變量,如果需要,該功能就是非靜態的。
如果不需要,就可以將該功能定義成靜態的。當然,也可以定義成非靜態,
但是非靜態需要被對象調用,而僅創建對象調用非靜態的
沒有訪問特有數據的方法,該對象的創建是沒有意義。
靜態代碼塊
static{}
隨著類的加載而執行。而且只執行一次。
作用:
用于給類進行初始化。
構造代碼塊(動態代碼塊)
{}
可以給所有對象進行初始化的。
而構造函數是給對應的對象進行針對性的初始化
主函數特殊之處:
1,格式是固定的。
2,被jvm所識別和調用。
public:因為權限必須是最大的。
static:不需要對象的,直接用主函數所屬類名調用即可。
void:主函數沒有具體的返回值。
main:函數名,不是關鍵字,只是一個jvm識別的固定的名字。
String[] args:這是主函數的參數列表,是一個數組類型的參數,而且元素都是字符串類型。