Java心得--物件導向初步__Java

來源:互聯網
上載者:User
1. 對象:是構成系統的最基本的單位;屬性:描述對象的靜態特徵;行為:描述對象的動態特徵。在java官方說法中,變數被稱為field,因此有的地方把變數翻譯為欄位。
    堆是一個運行時資料區,類的對象從中分配空間,它們不需要程式碼來顯示的釋放,而是由記憶體回收來處理。堆的優勢是:可以動態分配空間,生存期不必事先告訴編譯器,因為它們在運行時是動態分配記憶體的;缺點是:由於運行時動態分配,固存取速度慢。棧的優勢是:存取速度比堆快,僅次於寄存器,資料可以共用;缺點是存在棧中的資料大小與生存期必須是確定的,缺乏靈活性。因此說棧記憶體裡的引用變數並未真正儲存物件中的變數資料,對象的變數資料實際存放在堆記憶體中,而引用變數僅僅只是指向該堆記憶體裡的對象。
2. 類:一批具有相同屬性及行為的對象的抽象。類是模板,對象是執行個體;類是抽象的,對象是具體的。類是建築圖紙,而對象是某個大樓。
   修飾符:可以省略。也可以是:public、protected、private、static、final、abstract,其中前三個只能出現其中一個,後兩個也是;但是後兩個可以與static組合起來修飾方法。
3.方法傳回值類型:可以是Java語言的任何資料類型,如果聲明了傳回值類型,則方法體內必須有一個有效return語句,該語句返回一個變數或運算式的值,變數或者運算式的類型必須與方法傳回值類型匹配;如果一個方法沒有傳回值,則必須使用void來聲明。
4. 構造方法:是類中的特殊的方法
? 構造方法的名稱和類名相同;
? 構造方法沒有傳回值,不需void來聲明;(如果使用void關鍵字聲明構造方法沒有傳回值,編譯時間不會出錯,但java會把這個所謂的構造方法當成普通方法來處理)
? 當該類被執行個體化時,構造方法自動被調用。因此,建構函式的作用—對類對象中的成員進行初始化。
     如果程式員沒有為一個類編寫建構函式,則系統會該類提供一個預設的構造方法,一旦程式員提供了,系統將不再提供。
5. 類名 變數 [=new 類的建構函式(實參)]
例如:Car obj=new Car(“平治600”,“銀灰色”);
對象名.成員變數名    或   對象名.成員方法名(實參表)
例如:obj.name=“寶馬”;  或  obj. run(100);    
? 如果對象(執行個體)的使命完成,應該將其被從記憶體中刪除。
? 當某個對象不在被任何引用變數引用時,該對象將被清除
? 通過記憶體垃圾自動收集機制(finalizer)清除無用對象。
6.預設構造:public   類名(){}
構造方法的重載:當一個類有多個重載的構造方法時,建立該類對象的語句會根據給出的實際參數的個數、參數的類型、參數的順序自動調用相應構造方法。
不帶參數,方法體為空白。作用:自動初始化成員變數為預設值。
7.this的作用:
1).在同一個類中,類的成員變數是不能重名的,但方法或語句塊中的局部變數是可以和類的成員變數重名的,這時候必須使用this來限定和區分是否是類變數。
2).方法間的互相應用也可以使用this關鍵字。大部分時候,一個方法訪問本類的其他方法時,this是可以省略的,但對於static而言,則必須使用類名來直接調用,如果使用this關鍵字,則這個關鍵字就無法指向合適的對象,所以static修飾的方法中不能使用this引用,也因此static不能訪問不使用static修飾的普通變數,這與靜態變數不能直接存取非靜態變數完全一致。
public void highRun(int speed){
          int highSpeed=2*speed;
          this.run(highSpeed);
}
3).this引用也可以用於構造方法中作為預設引用,由於構造方法是直接使用new關鍵字來調用,所以在構造方法中調用另外的構造方法是不能直接寫構造方法名稱的,使用this引用調用其它構造方法進行初始化對象。;注意:this調用語句必須是建構函式中的第一個可執行檔語句。
4).在類的自身方法中引用該類自身。當this作為對象的預設引用時,程式可以像訪問普通變數一樣來訪問這個this引用,甚至可以把this當成普通方法的傳回值。(return  this)
8.方法不能獨立存在,方法必須屬於類或對象。因此,如果需要定義方法,則只能在類體內定義。
1). 用static修飾的方法屬於這個類,因此即使沒有建立該類的具體對象,類中用static修飾的方法也會存在。靜態方法(類方法)屬於類,或者說屬於該類的所有對象所共有。因此,若建立了某個類的具體對象後,也可以通過對象名來調用類方法。
注意:
? 靜態方法中不能使用this引用。
? 靜態方法只能處理靜態屬性、調用靜態方法。
? Static修飾的方法和變數,既可以通過類來調用,也可以通過對象來調用;沒有使用static修飾的普通變數,則只能通過對象來調用。
     Static是個特殊的關鍵字,可用於修飾方法、變數等成員。Static修飾的成員表明他是這個類共有的,而不屬於該類的單個執行個體,因此通常把static修飾的變數和方法成為類變數和類方法,不使用static修飾的普通方法、變數則屬於該類的單個執行個體,而不屬於該類,因此把這些成為執行個體變數和執行個體方法。又因為static直譯過來為靜態意思,所以前者又稱為靜態變數和靜態方法,後者為非靜態變數和非靜態方法。注意:靜態成員不能訪問非靜態成員。
類名(類是static方法的調用者).方法名(類方法或靜態方法
)([實參表]);
2).不使用static修飾的方法屬於該類的對象,不屬於類;因此,方法必須使用對象做調用者:
需注意:
? 方法不能獨立定義,只能在類體裡定義。
? 從邏輯意義上看,方法要麼屬於類,要麼屬於對象。因此,執行方法必須使用類或對象作為調用者。
? 同一個類中的方法相互調用時,如果被呼叫者法是普通方法,則預設使用this 作為調用者,如果被調方法是靜態方法,則預設使用類作為調用者。
類名(類是方法的調用者).方法名(執行個體方法或非靜態方法)([實參表]);
9.方法的參數傳遞:
注意:Java裡方法的參數傳遞方式為值傳遞---將實際參數值的副本(複製品)傳入方法內,而實際參數值本身不會受到任何影響。
1).基本類型的變數作方法參數
  
調用方法changAB()時,形參a、b值的交換,並不影響main方法中的實參a、b的值。
2).參考型別的變數作方法參數
 當changeAB方法中交換dw參數所引用DataWrap對象的a、b變數值後,我們看到main方法中dw變數所引用DataWrap對象的a、b變數值也被交換了。即傳遞的是地址引用。
  把dw直接賦為null,讓它不再指向任何有效地址。 dw=null;
main方法中的dw對象不受任何影響
10.  形參長度可變的方法
      從JDK1.5以後,Java允許定義形參長度可變的參數,從而允許為方法指定數量不確定的形參。
? 形參長度可變的方法定義:如果在定義方法時,在最後一個形參的類型後增加三點…,則表明該形參可以接受多個參數值,多個參數值被當成數組傳入。
例: 形參長度可變的方法outClassInfo。
public static void outClassInfo(String cname,String…sname){
            //在方法體內將參數sname當成是數組                            
}
  注意:
? 以可變個數形參來定義方法
public static void outClassInfo(String cname , String... sname);
? 採用數組形參來定義方法
public static void outClassInfo(String cname , String[] snames)
      這兩個方法簽名的效果雖然一樣,但還是有區別的:
? 調用可變形參的方法,更加簡潔;
? 調用數組形參來聲明的方法,必須傳給該形參一個數組,outClassInof(“09軟體”,new String[]{“王五”,“李四”});傳個方法的實參數值無須是一個數組,但如果採用數組形參來聲明方法,調用時則必須傳個該參一個數組。
? 數組形式的形參可以處於形參列表的任意位置,但個數可變的形參只能位於形參列表的最後.即一個方法中最多隻能有一個長度可變的形參。
11.  遞迴方法
      如果一個方法定義中直接或間接調用它本身,就是方法的遞迴調用。方法遞迴調用包含了一種隱式的迴圈,它會重複執行某段代碼,但這種重複執行無須迴圈控制。
例:編寫程式,計算10的階乘。
public static long calc(int n){
         if(n==1){
                 return 1;
         }else{
                 return n*calc(n-1);
         }
}
 
   遞迴方法一般由兩部分組成:
(1).遞迴體:遞迴的方式。
        (2).遞迴出口:遞迴終止的條件。
當一個方法不斷的調用其自身時,必須在某個時刻該方法的傳回值是確定的,即不再調用它自身;否則這種遞迴就變成了無窮遞迴,類似於死迴圈,因此定義遞迴方法時有一條重要的規定;遞迴一定要向已知方向遞迴。
 希望曆遍某個深度未知的檔案時,常用遞迴來實現。(做法:系統定義一個方法,接受一個檔案路徑作為參數)用遞迴方法可遍曆出當前路徑下所有的檔案和檔案路徑,然後再次調用其本身處理新路徑下的所有檔案和檔案路徑,直至遍曆完所有檔案及其檔案路徑。
12.  方法的重載
      Java語言允許在一個類中定義幾個同名的方法,但要求這些方法具有不同的參數特徵,這種做法稱為方法的重載(overloaded)。不同的參數特徵包括:
? 參數個數:int GetSort(int x);    
int GetSort(int x,int y);
? 參數類型:int GetSort(int x);   
 int GetSort(double x);
? 參數次序:int GetSort(int x,double y);
           int GetSort(double x,int y);
注意:傳回值類型不是重載的依據。
*:重載方法的調用:當類中有多個重載的方法,調用該類的某個重載方法時,Java能夠根據實參表的不同區分實際調用的是哪一個方法。
方法重載的要求:兩同一不同(同一類中方法名相同,參數列表不同。)與方法的其他部分沒有任何的關係(如:方法傳回值類型、修飾符等)
例4.12 方法的重載。
Overload ol=new Overload();
ol.test();     //調用無參數的test()
ol.test(“hello”);   //調用帶一個字串參數的test()
例4.13 重載方法中有一個帶可變長度的形參。
public void test(String msg);
public void test(String… books);
  則,olv.test();               //調用test(String… books);
      olv.test(“aa”,”bb”);  //調用test(String… books);
      olv.test(“aa”);         //調用test(String msg);
如只傳入一個參數,又需要調用參數長度可變的方法,則可採用如下調用形式:olv.test(new String[]{“aa”});
    不推薦重載具有形參長度可變的方法,因為這樣做確實沒有太大的意義,而且容易引起程式的可讀性降低。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.