1. 程式人生 > >java 學習筆記2 面向對象(上)

java 學習筆記2 面向對象(上)

awr ges abs nal mage 有效 面向對象 ima col

類和對象

類是某一批對象的抽象,可以把類理解成某種概念。對象是一個具體存在的實體。類和對象是面向對象的核心。

類定義的是多個實例的特征,類不是具體存在,實例才是具體存在。

定義類(class)的語法:

[修飾符] class 類名

{ 零個到多個構造器定義....

零個到多個成員變量....

零個到多個方法....}

要點:1.三種常見的成員:構造器(new關鍵字調用) 成員變量 方法

   2.類名由一個或多個有意義的詞連接而成,每個單詞首字母大寫,其余小寫。

3.修飾符可以是public final abstract或省略

定義成員變量(field)的語法:

[修飾符] 類型 成員變量名 [=默認值];

要點:1.成員變量名第一個單詞首字母小寫,後面每個單詞首字母大寫,其余小寫。

2.類型可以是基本類型,也可以是引用類型。

定義方法的語法

[修飾符] 方法返回值類型 方法名(形參列表)

{方法體}

要點:方法名和成員變量的規則相同,通常選英語動詞。

static是一個特殊的關鍵字,可修飾方法成員變量等成員。static修飾的成員屬於類本身而不屬於該類的單個實例,也叫類變量和實例變量(靜態變量和非靜態變量)。靜態成員不能訪問非靜態成員。

構造器是一種特殊的方法。

[修飾符] 構造器名(形參列表)

{方法體}

要點:構造器名必須與類名相同

類的作用:定義變量 創建對象 調用類方法或訪問類變量

對象的產生和使用

創建對象的根本途徑是構造器,通過new關鍵字來調用某個類的構造器即可創建這個類的實例。

例:Persn p=new Person();//定義p變量的同時為p變量賦值

類或實例訪問方法和成員變量的語法:類.類變量|方法 實例.實例變量|方法

static修飾的成員變量,可通過類和實例調用。沒有static修飾的方法和成員變量,只能通過實例來調用。

Person p=new Person(); 這段代碼創建了Person對象,對象賦值給p變量。

技術分享

person對象賦給一個引用變量的示意圖

person類型的變量

實際是一個引用,被存放在棧內存裏。指向實際的person對象

真正的person對象存放在堆內存中

java程序不允許直接訪問堆內存中的對象,只能通過該對象的引用操作該對象,當訪問p引用變量的成員變量和方法時,實際是訪問p所引用對象的成員變量和方法。

對象的this引用

this關鍵字的最大作用,就是讓類中的一個方法,訪問該類裏的另一個方法或實例變量。

this關鍵字總是指向調用該方法的對象。

大部分時候,一個方法訪問該類中定義的其他方法,成員變量時加不加this前綴效果完全一樣。

方法方法不能獨立定義,方法必須屬於類或對象。

同一個類裏的一個方法調用另一個方法時,如被調方法是普通方法,默認使用this作為被調者,如被調方法是靜態,默認使用類作為調用者。

java裏方法的參數傳遞只有一種:值傳遞 將實際參數的副本傳入方法內而參數本身不受影響。

參數副本分為基本類型的參數和引用類型(地址)的參數

 1 public class PrimitiveTransferTest
 2 {
 3     public static void swap(int a , int b)
 4     {
 7         int tmp = a;
 8              a = b;
10             b = tmp;
12         System.out.println("swap方法裏,a的值是"
13             + a + ";b的值是" + b);}
14    public static void main(String[] args)
16     {
17         int a = 6;
18         int b = 9;
19         swap(a , b);
20         System.out.println("交換結束後,變量a的值是"
21             + a + ";變量b的值是" + b);  }

技術分享

 1 class DataWrap
 2 {
 3     int a;
 4     int b;
 5 }
 6 public class ReferenceTransferTest
 7 {
 8     public static void swap(DataWrap dw)
 9     {
10         // 下面三行代碼實現dw的a、b兩個成員變量的值交換。
11            int tmp = dw.a;
13             dw.a = dw.b;
15             dw.b = tmp;
17         System.out.println("swap方法裏,a成員變量的值是"
18             + dw.a + ";b成員變量的值是" + dw.b);
19         // 把dw直接賦為null,讓它不再指向任何有效地址。
20         dw = null;
21     }
22     public static void main(String[] args)
23     {
24         DataWrap dw = new DataWrap();
25         dw.a = 6;
26         dw.b = 9;
27         swap(dw);
28         System.out.println("交換結束後,a成員變量的值是"
29             + dw.a + ";b成員變量的值是" + dw.b);
30     }

技術分享

成員變量和局部變量成員變量是在類裏定義的變量,局部變量實在方法裏定義的變量。

技術分享

只要類存在,程序可以訪問該類的類變量 類.類變量

只要實例存在,程序可以訪問該實例的實例變量 實例.實例變量

類變量也可以讓該類的實例來訪問 實例.類變量

通過實例修改類變量的值,會導致該類的其他實例訪問這個類變量時也獲得被修改的值。

java允許局部變量和成員變量同名,如果方法裏的局部變量和成員變量同名,局部變量會覆蓋成員變量,若需在方法裏調用被覆蓋的成員變量,則可使用this(實例變量)或類名(類變量)來調用。

成員變量在內存中的運行機制

技術分享

java 學習筆記2 面向對象(上)