J2SE面向對象的幾點總結

1.對成員變量的操作只能放在方法中,方法可以對成員變量進行操作形成算法。如:

class A{

int a=9;

float v=12.6f;

void f(){

a=12;

b=12.56f;

以上是可以的,但是不可以這樣:

class A{

int a;

float b=12.b;//非法的,這是賦值語句,不是變量聲明

a=12.56f;

void f(){}

}

2.構造方法是一種特殊的方法,它的名字必須與它所在類的名字完全相同,而且沒有類型。Java允許一個類中有若干個構造方法,但這些構造方法的參數必須不同,或者參數的類型不同,或者參數的個數不同。如果子類方法中沒有顯示的調用父類的構造方法,而父類又沒有無參的構造方法,則編譯出錯。

3.生成一個對象時,成員變量在heap中分配內存空間。當對象調用方法時,方法中的局部變量被分配內存空間,生成在stack中。方法執行完畢,局部變量即刻釋放內存。局部變量聲明時如果沒有初始化,就沒有默認值,因此在使用局部變量之前,要事先爲其賦值。

4.static關鍵字。

方法聲明中用關鍵字static修飾的稱爲類方法或靜態方法,不用static修飾的叫做實例方法。實例方法可以調用類中的類方法和實例方法,類方法只能調用類中的類方法,不能調用實例方法。

在使用靜態類時要注意下面幾點:

(1)在靜態方法裏只能直接調用同類中其他的靜態成員(包括變量和方法),而不能直接訪問類中的非靜態成員。這是因爲,對於非靜態的方法和變量,需要先創建類的實例對象後纔可以使用,而靜態方法在使用前部用創建任何對象。

(2)靜態方法不能以任何方式引用this和super關鍵字。因爲靜態方法在使用前部用創建任何實例對象,當靜態方法被掉用能夠時,this所引用的對象根本沒有產生。

(3)main()方法是靜態的,因此jvm在執行main方法時不創建main方法所在的類的實例對象,因而在main()方法中,不能直接訪問該類中的非靜態成員,必須創建該類的一個實例對象後,才能同類通過這個對象去訪問類中的非靜態成員。

(4)static對象存放在data seg,可以直接用類名.變量名。

5.object類。查詢jdk api中java.lang.Object。

public String toString()


public boolean equals(Object obj);如下程序:
 
返回值爲false,因爲比較的是兩個對象的內存地址,沒new一次就分配一個不
同的內存地址,所以比較後兩個值不相等。

“for any non-null reference values x and y, this method returns true if and only if x and y refer to the same object (x == y has the value true).”

“對於任何非空引用值 xy,當且僅當 xy 引用同一個對象時,此方法才返回 truex == y 具有值 true)”

所以爲了比較兩個對象的是否相等可以用此方法比較,但是默認的equals方法和c1==c2是一樣的,所以要重寫equals方法,在方法內部實現比較。程序如下:

image

image

當然還有一些類如String也重寫了equals方法,此處我就不介紹了,可以參考api文檔自學下。

6.package和import語句

class文件的最上層包的父目錄必須位於classpath下。如果出現不符合這一情況的時候,可以設置classpath來解決,當然如果你是用eclipse編譯的話,ide自動幫你爲每一個項目設置不同的classpath,解決了這一衝突。

在jdk/jre/lib/rt.jar中是jdk運行時的類文件存放的位置。其中java.lang這個包中的類不需要引用,可以直接使用。

用命令提示符語句打jar包:

image

將jar包加到classpath中,就可以找到jar中的類了。

7.接口是抽象方法和常量值的定義的集合。是一種特殊的抽象類,只包含常量和方法的定義,而沒有變量和方法的實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章