java學習(62-83)

來源:互聯網
上載者:User

標籤:

---恢複內容開始---

1、物件導向

三大特性:封裝、繼承、多態

面向過程-想到啥做啥

物件導向-整體化分析,再分塊製作。

發生變化時,面向過程可能要推倒重做,物件導向則可以適應變化

1.1封裝:Encapsulation

(1)把對象的屬性和行為看成一個密不可分的整體,將這兩者“封裝”在一個不可分割的獨立單位(對象)中。

(2)把不需要讓外界知道的資訊隱藏起來,有些對象的屬性及行為允許外界使用者知道或使用,但不允許更改,而另一些屬性或行為,則不允許外界知道,或只允許使用對象的功能,而儘可能隱蔽對象的功能實現細節。

另一個特點,為封裝在一個整體內的變數及方法規定不同層級的“可見度”或存取權限

1.2繼承:

(1)提高代碼複用性,提高開發效率。

(2)首先擁有反映事物一般特性的類,然後再其基礎上派生出反映特殊事物的類。

(3)若子類只允許繼承一個父類,則稱為單繼承;若允許繼承多個父類,則稱為多繼承。java通過介面(interface)的方式來彌補因java不支援多繼承而帶來的子類不能想用多個父類的成員的缺點。

1.3多態性:

允許程式中出現重名現象。使程式的抽象程度和簡潔程度更高,有助於程式設計人員對程式的分組協同開發。

(1)方法重載

(2)對象多態,子類對象與父類對象進行相互轉換,而且根據其使用的子類的不同,完成的功能也不同。

 

PS:面試關於對象

面試官需要尋找具有專業編程功能的人來完成公司工作

我就是那個對象,具備這個功能

你就是在指揮我,就是在使用我的專業技能

當然,我不禁具備專業編程技能,還會一些更多的。

一切皆對象,萬物皆對象。

 

2、多個引用指向同一個對象,一變全變。

 

3、成員變數和局部變數

成員變數作用於整個類,

局部變數作用於函數中,或語句中。

成員變數在堆記憶體中,因對象存在而存在

局部變數,棧記憶體

 

4、匿名對象

new Car().num=5;//執行完變垃圾

new Car().color="blue";//執行完變垃圾

new Car().run;

使用方式

(1)當對對象的方法只調用一次時可用,較簡化。

  若對一個對象進行多個成員調用,必須給對象起名字

(2)可將匿名對象作為實際參數進行傳遞

且調用過後,會自動變為垃圾,釋放記憶體

5、封裝

5.1、私人private(僅是封裝的一種形式)

許可權修飾符,用於修飾類中的成員(成員變數,成員函數)

私人只在本類中有效

可提供方法來訪問,在方法中加判斷等語句。

提高代碼的健壯性

 

6、建構函式

作用:對象的初始化(沒寫的話都內建空參數的建構函式)

多個建構函式是以重載的形式存在

6.1、建構函式與一般函數比較

建構函式在對象已建立就運行,給對象初始化。                    只運行一次

一般函數是對象調用才執行,給對象添加其具備的功能。         可調用多次

 

7、構造代碼塊

{}//沒函數名

作用: 給對象初始化

對象一建立就運行,優先於建構函式。

區別: 構造代碼塊是對所有對象進行統一初始化,

而建構函式是給對應的對象初始化。

 

8、this關鍵字

8.1、哪個對象調用this所在的函數,this代表哪個對象

定義類功能時,該函數內部要用到該函數的對象時,這時用this來表示這個對象

 1 package learn; 2  3 class Person{ 4     private String name; 5     private int age; 6     Person(int age) 7     { 8         this.age=age; 9     }10     public void speak(){11         System.out.println("name="+name+"...age="+age);12     }13     public boolean compare(Person p)14     {15         return this.age==p.age;//相當於p1.age==p2.age;16     }17 }18 19 public class PersonDemo3 {20     public static void main(String[] args){21         Person p=new Person(40);22         Person p2=new Person(20);23         System.out.print(p.compare(p2));24     }25 26 }

8.2、建構函式之間調用,可用this

不過this()語句需要放在第一行。即初始化動作需要第一行執行,有更細緻的初始化則使用更細緻的。

 

9、靜態static

修飾符,用於修飾成員(成員變數,成員函數),共性變數,存放於方法區

調用方式+1: 類名.靜態變數

9.1特點

(1)隨著類的載入而載入,隨著類的消失而消失即生命週期長(弊端1)

(2)優先於對象存在

(3)被所有對象共用(利處2)

(4)可以直接被類名調用(利處3)

 

9.2、類變數和執行個體變數

類變數隨著類的載入而存在於方法區中(利處1)

執行個體變數隨著對象的建立而存在於堆記憶體中

 

9.3、靜態方法

靜態方法只能訪問靜態成員,不可用this,super關鍵字。(弊端2)

ps:相當於有了類名.

 

9.4、main函數

main不是關鍵字,只是可被jvm識別的特殊單詞

public static void main(String[] args)唯一可改args

傳入的是new String[0]

 1 package learn; 2  3 public class MainDemo { 4     public static void main(String[] args) 5     { 6         String[] arr={"hah","hehe","heihei","xixi","hiahia"}; 7         MainTest.main(arr); 8     } 9 }10 class MainTest{11     public static void main(String[] args)12     {13         for(int x=0;x<args.length;x++)14         {15             System.out.println(args[x]);16         }17     }18 }

 

9.5何時使用靜態

共用資料--靜態變數

功能內部沒有訪問到非待用資料--靜態方法

工具類私人化,包括建構函式都私人化,只通過類名調用。

 

10、調用他人的class時,記得設定classpath=.;c\class;(記得保留當前路徑)

 

11、文檔

必須為public類

javadoc -d myhelp -author -version ArrayTool.java

    產生處的文檔名 作者,版本號碼可不加 文檔依據的源檔案

index檔案開始查看

 

12、靜態代碼塊

隨著類的載入而執行,只執行一次,用於給類初始化,無法含有非靜態內容,優先於主函數

 1 package learn;//執行結果 ac9d 2  3 class StaticCode{ 4     int num=9; 5     StaticCode() 6     { 7         System.out.println("b"); 8     } 9     10     static{11         System.out.println("a");12     }13     14     {15         System.out.println("c"+num);16     }17     18     StaticCode(int x)19     {20         System.out.println("d");21     }22     23     public static void show(){24         System.out.println("show run");25     }26 }27 28 public class StaticCodeDemo{29     public static void main(String[] args){30         new StaticCode(4);31     }    32 }

 

13、執行順序

1、因new用到了Person.class,所以會先找到Person.class檔案並載入到記憶體中。

2、執行該類中的static代碼塊

3、在堆記憶體中開闢空間,分配記憶體位址

4、在堆記憶體中建立對象的特有屬性,並進行預設初始化

5、對屬性進行顯式初始化

6、對對象進行構造代碼塊初始化

7、對對象對應的建構函式初始化

8、將記憶體位址賦給棧記憶體的p變數。

 

14、單例模式-一個類中只存在一個對象

14.1特點

(1)禁止其他程式建立該類對象--將建構函式私人化

(2)讓其他程式能訪問該類對象--類中建立一個本類對象

(3)方便其他程式對對象的訪問--可以對外提供一些訪問方式(只有這個進出口)

保證對象在記憶體中唯一才用到

餓漢式:

Single類一進記憶體就已經建立好了對象

 1 package learn; 2  3 class Single{ 4     private int num; 5     public void setNum(int num) 6     { 7         this.num=num; 8     } 9     public int getNum()10     {11         return num;12     }13     private Single(){}14     private static Single s=new Single();15     public static Single getInstance(){16         return s;17     }18 }19 public class SingleDemo {20     public static void main(String[] args)21     {22         Single s1=Single.getInstance();23         Single s2=Single.getInstance();24         s1.setNum(40);25         System.out.print(s2.getNum());26     }27 }

懶漢式:

Single類進記憶體,對象還不存在,只在調用了getInstance方法時,才建立對象.

 1 package learn; 2 class Single2{ 3     private static Single2 s=null; 4     private Single2(){}; 5     public static Single2 getInstance(){ 6         if(s==null)//此處兩條語句執行,容易因cpu多線程導致報錯。具體解決見多線程。故除面試外,多用餓漢式 7             s=new Single2(); 8         return s; 9     }10 }11 public class SingleDemo2 {12     public static void main(String[] args){13         Single2 s2=Single2.getInstance();14     }15 }

 

java學習(62-83)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.