1. 程式人生 > >Java學習——類和物件

Java學習——類和物件

        Java是一門面向物件的語言,其重要的一個思想就是“萬物皆物件”。類是java的核心內容,它是一種邏輯結構,定義了物件的結構,可以由一個類得到眾多相似的物件。

        類實際上是定義一個模板,而物件是由這個模板產生的一個例項。

類的一般形式:

class 類名{

型別 例項變數名;

型別 例項變數名;

。。。。。。

型別 方法名(引數){

方法內容

。。。。。。

注意:在JAVA中是允許把許多類的宣告 放在一個JAVA檔案中的,但是這些類只能有一個類被宣告為public,而且這個類名必須和Java檔名相同。

private:只有本類可見。

protected:本類、子類、同一包的類可見。

預設(無修飾符):本類、同一包的類可見。

public:對任何類可見。


類的例項變數和方法:


有返回值的方法:


帶引數的方法:

型別 方法名(引數型別 引數1,引數型別 引數2...){

方法體


測試Human類:


測試結果:


方法的過載:Java中支援兩個或者多個同名的方法,但是它們的引數個數和型別必須有區別。當呼叫這些同名的方法時,java會根據引數的個數和型別來確定到底呼叫的是哪一個方法。


物件的建立和使用:

建立物件:

(1)

Human wangming;     宣告一個Human類的變數wangming;

wangming=new Human();   通過new運算獲得一個物件例項併為其分配記憶體,獲得物件例項賦值給wangming。

(2)

Human wangming=new Human();  這個方法和上面兩句的效果一樣

(3)呼叫方法是通過“.”運算子實現的   ,如:wangming.eat();


物件之間也可以進行賦值運算

建構函式:Human zhangsan=new Human();實際上是呼叫了一個方法,不過這個方法是系統自帶的方法,由於這個方法被用來構造物件,所以把它稱為建構函式。它的作用是生成物件,並對物件的例項變數進行初始化。系統自帶的預設建構函式把所有的數字變數設為0,把所有的boolean型變數設為false,把所有的String變數都設為null。建構函式有一個很明顯的特點是它的名字必須跟類名相同,並且沒有返回在值型別。


通過編寫帶有引數的建構函式可以把值傳遞給物件的變數:


建構函式的過載:(這個與java不再提供預設的建構函式不矛盾嗎?)



回答上面的疑問:(不註釋的時候下面那句不會報錯)


建構函式中呼叫其它的建構函式:



Static關鍵字:

靜態變數:普通的各種變數都是屬於某個物件的,靜態變數跟物件是沒有關係的,跟它相關聯的是類而不是物件。(static變數對每個類都只有一份儲存空間,非static變數對類的每個物件有一個儲存空間)

以下是個失敗的例子,最後一個s2.staticint理論應該等於1;


規範的靜態變數的訪問方法:1、類名.變數名(首選)    


規範的靜態變數的訪問方法:2、也可以通過物件去引用靜態變數,如:物件名.靜態變數

靜態方法的訪問:1、類名.方法名(首選)       2、物件來引用某個靜態方法  物件名.靜態方法

靜態方法的重要用法是:不建立任何物件的前提下就可以呼叫它,如main方法

靜態方法不能直接訪問非靜態變數。

非靜態方法可以直接訪問靜態變數。

mian函式也是一個靜態方法


靜態常量:

定義:public static final int X=123;該變數X在程式中是不可以改變的,不能通過賦值改變它的值。

靜態變數、靜態常量的初始化是呼叫 建構函式之前完成的。


引數傳遞:

引數傳遞分為傳值和傳地址,傳值:把引數的值直接傳遞給方法,而傳地址是給方法提供引數的地址。Java的引數傳遞方法都為傳值呼叫,但涉及到物件的傳遞時,比較複雜.

基本型別的引數傳遞:


this關鍵字的用途:

在建構函式中呼叫其他的建構函式。

在方法中獲得呼叫該方法的物件。

物件型別的引數傳遞:




交換前後結果一樣。

包:

匯入一個包後就可以使用該包中的類了。

類的成員變數:在類中宣告的變數;類的區域性變數:在類的方法中宣告的變數


細節問題註釋已經寫的比較清楚了,這裡不在贅述,只是總結一下,其實this主要要三種用法:

1、表示對當前物件的引用!

2、表示用類的成員變數,而非函式引數,注意在函式引數(區域性變數)和成員變數同名是進行區分!其實這是第一種用法的特例,比較常用,所以那出來強調一下。

3、用於在構造方法中引用滿足指定引數型別的構造器(其實也就是構造方法)。但是這裡必須非常注意:只能引用一個構造方法且必須位於開始!

還有就是注意:this不能用在static方法中!所以甚至有人給static方法的定義就是:沒有this的方法!雖然誇張,但是卻充分說明this不能在static方法中使用!

看下圖中顏色不一樣:第一張圖表示的是成員變數;第二張表示的是區域性變數