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
).”
“對於任何非空引用值 x
和 y
,當且僅當 x
和 y
引用同一個對象時,此方法才返回 true
(x == y
具有值 true
)”
所以爲了比較兩個對象的是否相等可以用此方法比較,但是默認的equals方法和c1==c2是一樣的,所以要重寫equals方法,在方法內部實現比較。程序如下:
當然還有一些類如String也重寫了equals方法,此處我就不介紹了,可以參考api文檔自學下。
6.package和import語句
class文件的最上層包的父目錄必須位於classpath下。如果出現不符合這一情況的時候,可以設置classpath來解決,當然如果你是用eclipse編譯的話,ide自動幫你爲每一個項目設置不同的classpath,解決了這一衝突。
在jdk/jre/lib/rt.jar中是jdk運行時的類文件存放的位置。其中java.lang這個包中的類不需要引用,可以直接使用。
用命令提示符語句打jar包:
將jar包加到classpath中,就可以找到jar中的類了。
7.接口是抽象方法和常量值的定義的集合。是一種特殊的抽象類,只包含常量和方法的定義,而沒有變量和方法的實現。