閱讀502 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java 筆記01

麵向對象主要針對麵向過程。

麵向過程的基本單元是函數。

 

什麼是對象:EVERYTHING IS OBJECT(萬物皆對象)

 

所有的事物都有兩個方麵:

有什麼(屬性):用來描述對象。

能夠做什麼(方法):告訴外界對象有那些功能。

後者以前者為基礎。

大的對象的屬性也可以是一個對象。

 

為什麼要使用麵向對象:

首先,麵向對象符合人類看待事物的一般規律。

對象的方法的實現細節是屏蔽的,隻有對象方法的實現者了解細節。

方法的定義非常重要。方法有參數,也可能有返回值。

 

注意區分:對象(本身)、對象的實現者、對象的調用者。

分析對象主要從方法開始。

我們通過類來看待對象,類是對象的抽象。

 

其次,采用麵向對象方法可以使係統各部分各司其職、各盡所能。

對象之間的耦合性一定要低(比如不同硬盤和不同主板之間的關係)。這樣才能使每個對象本身做成最好的。

 

對於對象的要求:高內聚、低耦合,這樣容易拚裝成為一個係統。

實現高內聚就是要最大限度低提高複用性(複用性好是因為高內聚)。

可複用性是OOP的基礎。

 

比較麵向過程的思想和麵向對象的思想:

麵向過程的思想:由過程、步驟、函數組成,以過程為核心;

麵向對象的思想:以對象為中心,先開發類,得到對象,通過對象之間相互通信實現功能。

麵向過程是先有算法,後有數據結構。

麵向對象是先有數據結構,然後再有算法。

 

在用麵向對象思想開發的過程中,可以複用對象就進行複用,如無法進行複用則開發新的對象。

開發過程是用對個簡單的對象的多個簡單的方法,來實現複雜的功能 。

從語法上來看,一個類是一個新的數據類型。

在麵向對象編程中,除了簡單數據類型,就是對象類型。

定義類的格式:

class  Student{

  代碼

}

注意類名中單詞的首字母大寫。

實例變量:定義在類中但在任何方法之外。(New出來的均有初值)

局部變量:定義在方法之中的變量。

局部變量要先賦值,再進行運算,而實例變量均已經賦初值。這是局部變量和實例變量的一大區別。

實例變量的對象賦值為null。

局部變量不允許範圍內定義兩個同名變量。實例變量的作用域在本類中完全有效,當被其他的類調用的時候也可能有效。

實例變量和局部變量允許命名衝突。

 

書寫方法的格式:

修飾符   返回值       方法名           調用過程中           方法體

可能出現的例外

 public  int/void   addNumber(參數)    throwExcepion          {}

 

例:

public  int addNumber(int a,int b){

}

注:方法名中的參數int a,int b為局部變量

 

類方法中的一類特殊方法:構造方法。

構造方法是當用類生成對象時,係統在生成對象的過程中利用的方法。

注意:構造方法在生成對象的時候會被調用,但並不是構造方法生成了對象。

構造方法沒有返回值。格式為:public 方法名。

構造方法的方法名與類名相同。

構造方法是在對象生成的過程中自動調用,不可能利用指令去調用。

在一個對象的生成周期中構造方法隻用一次,一旦這個對象生成,那麼這個構造方法失效。

 

用類來生成對象的語句:

Student  s=new Student()。

第一個Student表示這是用Student類進行定義。“Student()”表示調用一個無參數的構造方法。

如果()中有參數,則係統構造對象的過程中調用有參的方法。

此時S稱為一個對象變量。

 Student  s的存儲區域存放的是地址:一個對象在硬盤上占有一個連續地址,首地址賦予s空間。

S稱為對象Student的引用。

注意:在對象變量中存放的是引用(地址);在簡單變量中存放的是數值。

 

可以構造多個構造方法,但多個構造方法的參數表一定不同,參數順序不同即屬於不同的構造方法:

publicstudent(string name,int a){

}

public student(inta,string name){

}

為兩個不同的構造方法。

如果我們未給係統提供一個構造方法,那麼係統會自動提供一個為空的構造方法。

練習:寫一個類,定義一個對象,定義兩個構造方法:一個有參,一個無參。

(編寫一個程序驗證對象的傳遞的值為地址)

注意下麵這種形式:

static voidchangename(student stu){stu.setName “LUCY”}

注意生成新的對象與舊對象指向無關,生成新對象生命消亡與舊對象無關。

 

麵向對象方法的重載(overloading)和覆蓋(overriding)。

在有些JAVA書籍中將overriding稱為重載,overloading稱為過載。

Overloading在一個類中可以定義多個同名方法,各個方法的參數表一定不同。但修飾詞可能相同,返回值也可能相同。

在程序的編譯過程中根據變量類型來找相應的方法。因此也有人認為 overloading是編譯時的多態,以後我們還會學到運行時多態。

 

為什麼會存在overloading技術呢?作為應對方法的細節。

利用類型的差異來影響對方法的調用。

吃()可以分為吃肉,吃菜,吃藥,在一個類中可以定義多個吃方法。

 

構造方法也可以實現overloading。例:

public  void teach(){};

public  void teach(int a){};

public  void teach(String a){}為三種不同的方法。

 

Overloading方法是從低向高轉。

Byte—short—float—int—long—double。

 

在構造方法中,this表示本類的其他構造方法:

student(){};

student(stringn){

  this();//表示調用student()

}

如果調用student(int a)則為this(int a)。

特別注意:用this調用其他構造方法時,this必須為第一條語句,然後才是其他語句。

 

This表示當前對象。

 

Public  void printNum(){

  Int number=40;

  System.out.println(this.number);

}

此時打印的是實例變量,而非局部變量,即定義在類中而非方法中的變量。

 

This.number表示實例變量。

誰調用this.number那麼誰即為當前(this)對象的number方法。

 

封裝:使對象的屬性盡可能私有,對象的方法盡可能的公開。用private表示此成員屬性為該類的私有屬性。

 

Public表示該屬性(方法)公開;

Private表示該屬性(方法)為隻有本類內部可以訪問(類內部可見)。

(想用private還要用set和get方法供其他方法調用,這樣可以保證對屬性的訪問方式統一,並且便於維護訪問權限以及屬性數據合法性)

如果沒有特殊情況,屬性一定私有,方法該公開的公開。

如果不指明誰調用方法,則默認為this。

區分實例變量和局部變量時一定要寫this。

最後更新:2017-04-02 16:47:46

  上一篇:go Java 筆記11
  下一篇:go 為什麼要把jsp放在WEB-INF目錄下