對部分總結(jié)的更新_第1頁
對部分總結(jié)的更新_第2頁
對部分總結(jié)的更新_第3頁
對部分總結(jié)的更新_第4頁
對部分總結(jié)的更新_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、對部分總結(jié)的更新很久沒有來了,不解釋,現(xiàn)在把以前總結(jié)的東西,再總結(jié)一次,考試完了,把總結(jié)放在這里以后可能還會用到。面向?qū)ο笤贘AVA中,一切都是對象,但我們用來操縱對象的卻是引用。對象包括變量(屬性)和方法,變量表示對象的屬性,方法用來描述對象的功能,處理過程。對于對象的要求:高內(nèi)聚、低耦合,這樣容易拼裝成為一個系統(tǒng)。實現(xiàn)高內(nèi)聚就是要最大限度低提高復用性(復用性好是因為高內(nèi)聚)??蓮陀眯允荗OP的基礎。類方法中的一類特殊方法:構(gòu)造方法。構(gòu)造方法是當用類生成對象時,系統(tǒng)在生成對象的過程中利用的方法。注意:構(gòu)造方法在生成對象的時候會被調(diào)用,但并不是構(gòu)造方法生成了對象。構(gòu)造方法沒有返回值。構(gòu)造方法的

2、方法名與類名相同。如果用戶沒有為類編寫構(gòu)數(shù)方法,則系統(tǒng)會為該類生成一個無參的默認構(gòu)造方法,否則,系統(tǒng)將不再為該類自動生成無參構(gòu)造方法。this表示當前對象,this()表示本類構(gòu)造方法。super表示直接父類對象,super()表示直接父類構(gòu)造方法。this(),super()均可帶參數(shù)。繼承父類(SuperClass)和子類(SonClass)。父類的非私有化屬性和方法(非構(gòu)造方法)可以默認繼承到子類。class Son extends FatherJAVA中只支持單繼承。JAVA通過接口和內(nèi)部類實現(xiàn)多繼承。父類的構(gòu)造方法子類不能繼承,子類只能在自已的構(gòu)造方法中訪問父類的構(gòu)造方法。方法覆蓋(

3、OVERRIDE):當父類中的非私有方法跟子類的方法名一樣,參數(shù)一樣,返回類型也一樣時,稱為子類方法對父類方法的覆蓋。這時,子類方法的訪問控制權(quán)限不能比父類方法的訪問控制權(quán)限更嚴格,也不能拋出更多的異常,否則編譯出錯。這也是JAVA之所以有動態(tài)多態(tài)的原因。修飾屬性和方法的修飾符,以下范圍依次由嚴到寬:private:本類訪問;default:同包可見。protected:同包可見+子類可見public:表示所有的地方均可見。當構(gòu)造一個對象的時候,系統(tǒng)先遞歸構(gòu)造父類對象,再構(gòu)造子類對象。super()表示調(diào)用父類的構(gòu)造方法。this()用于調(diào)用本類的構(gòu)造方法,可以有參或無參,以此調(diào)用相應的構(gòu)造函

4、數(shù)。Super()和this()一樣,如果出現(xiàn),則必須放在構(gòu)造函數(shù)的第一行,且兩者不能同時出現(xiàn)在同一構(gòu)造函數(shù)中。如果沒有調(diào)用super()和this()構(gòu)造方法,那么系統(tǒng)會自動調(diào)用父類的無參構(gòu)造方法,相當于super()。因此在編寫類時,如果定義了有參構(gòu)造方法,則應同時定義一個無參構(gòu)造方法,以便別人斷承。構(gòu)造對象的順序:靜態(tài)變量,靜態(tài)初始化塊,static1.加載類2.判斷構(gòu)造函數(shù)中有沒有this()和super(),如果有this(),則調(diào)用本類相應的構(gòu)造函數(shù);如果有super(),則調(diào)用父類相應的構(gòu)造函數(shù);如果兩個都沒有,則調(diào)用父類無參構(gòu)造函數(shù);以此遞歸類推。3.實例變量初始化。4.執(zhí)行動

5、態(tài)初始化塊。xxxxxxxx5.執(zhí)行本類的構(gòu)造方法。張老也給我們講過,運行時是先追溯到頂層父類,挨個構(gòu)造到子類提示:1.為什么初始化一個子對象時必須先調(diào)用基類的構(gòu)造方法?因為子對象內(nèi)部包含著一個父對象,所以,初始化子對象前必須先初始化這個在子對象內(nèi)部的父對象。父類在子類構(gòu)造器可以訪問它之前就已經(jīng)完成了初始化。2.執(zhí)行類的所有特定的清理動作,其順序跟生成對象的順序相反,通常這就要求父類元素仍舊存活。3.組合和繼承都允許在新的類中放置子對象,組合是顯式地這樣做,而繼承是隱式地做。組合技術(shù)通常用于想在新類中使用現(xiàn)有類的功能而非它的接口的這種情形。當想使用現(xiàn)有類,并開發(fā)一個它的特殊版本時,則使用繼承。

6、多態(tài)多態(tài):多態(tài)指的是運行時類型識別。當對象調(diào)用覆蓋方法時,系統(tǒng)在編譯過程中不對對象類型進行識別和方法綁定,而是在運行時才對該對象進行類型識別,并根據(jù)該對象的具體類型綁定執(zhí)行相應類型中定義的覆蓋方法。如果在子類里找不到相應的方法,才到父類里去打。多態(tài)之所以能體現(xiàn)出來,正是由于子類跟父類間發(fā)生的方法覆蓋。比如就拿練習的東西舉例吧:class Animalvoid eat();class Dog extends Animalvoid eat();class Pig extends Animalvoid eat();Void go(Animal animal)animal.eat();Animal a

7、=new Dog();Pig p=new Pig();go(a);go(p);abstract修飾符abstract(抽象)可以修飾類、方法如果將一個類設置為abstract,此類不可生成對象,必須被繼承使用。抽象類除了不能生成對象外,其它與變通類無異。抽像類繼承一個類時,該類必須有無參構(gòu)造方法,否則出錯.abstract可以將子類的共性最大限度的抽取出來,放在父類中,以提高程序的簡潔性。abstract雖然不能生成對象,但是可以聲明abstract類的引用。final和abstract永遠不會同時出現(xiàn)。1抽象類,一般無構(gòu)造方法;2若抽象類有構(gòu)造方法,一般聲明為protected,供它的子類通

8、過super調(diào)用。當abstract用于修飾方法時,此時該方法為抽象方法,不需要實現(xiàn),實現(xiàn)留給子類覆蓋,子類覆蓋該方法之后方法才能夠生效。注意比較:private void print();此語句表示方法的空實現(xiàn)。abstract void print();此語句表示抽象方法,無實現(xiàn)。如果一個類中有一個抽象方法,那么這個類一定為一個抽象類。反之,如果一個類為抽象類,那么其中可能有非抽象的方法。如果一個類繼承一個抽象類,則這個類必須實現(xiàn)(覆蓋)該抽象類的所有抽象方法。如果有抽象方法未被實現(xiàn),則子類將繼承父類的抽象方法,所以這個子類也一定是抽象類。abstract和static,private,f

9、inal同時修飾一個類或方法。interface接口接口與類屬于同一層次,接口是一種特殊的抽象類。接口不能生成對象,但可以聲明引用;接口沒有構(gòu)造方法。接口里定義的所有屬性都一定是public static final的。所有方法都是public abstract的。interface IA與類相似,一個文件只能有一個public接口,且與文件名相同。在一個文件中不可同時定義一個public接口和一個public類。1.一個類實現(xiàn)一個接口的格式:class IAImple implements IA;一個接口可以extends另一個接口。一個類實現(xiàn)接口時,必須實現(xiàn)接口中及其父類的所有的方法。接口

10、中聲明方法時可不寫public,方法默認為public abstract的。但在子類中實現(xiàn)接口的過程中public不可省。提示:1.為什么要有接口?為什么不直接用抽象類呢?用接口可以實現(xiàn)多繼承;一個類除繼承另外一個類,還可以實現(xiàn)接口;class IAImpl extends java.util.Arrylist implement IA繼承類實現(xiàn)接口這樣可以實現(xiàn)變相的多繼承。一個類只能繼承另外一個類,但是它可以實現(xiàn)多個接口,中間用,隔開。Implements IA,IB所謂實現(xiàn)一個接口,就是指實現(xiàn)接口中的方法。接口和接口之間可以定義繼承關(guān)系,并且接口之間允許多繼承。例:interface IC

11、 extends IA,IB;接口和多態(tài)都為JAVA技術(shù)的核心。接口實際上是定義一個規(guī)范、標準。通過接口可以實現(xiàn)不同層次、不同體系對象的共同屬性;通過接口實現(xiàn)write once as anywhere.以JAVA數(shù)據(jù)庫連接為例子:JDBC制定標準;數(shù)據(jù)廠商實現(xiàn)標準;用戶使用標準。接口通常用來屏蔽底層的差異。接口也因為上述原因被用來保持架構(gòu)的穩(wěn)定性。可以修飾類的修飾符有:public,abstract,final,default private,protected不能修飾類。String類String str1=Wuzhongyi;String str2=Wuzhongyi;str1=str2

12、/這種創(chuàng)建方法兩個引用指向常量域的同一個Wuzhongyi。String str3=new String(Wuzhongyi);String str4=new String(Wuzhongyi);str3!=str4以下為常用方法:char charAt(int index)Returns the char value at the specified indexOf(int ch)Returns the index within this string of the first occurrence of the specified character.String su

13、bstring(int beginIndex)Returns anew string that is asubstring of this string.String substring(int beginIndex,int endIndex)Returns anew string that is asubstring of this string./beginIndex=substring endIndex字符串的解析:public static void main(String args)String tom=12,152,54,1,22,96,696;int i=0;String s=n

14、ull;StringTokenizer st=new StringTokenizer(tom,);int n=st.countTokens();/獲取分隔后的元素個數(shù).while(st.hasMoreTokens()/還有更多元素?si+=st.nextToken();/獲取下一個元素集合集合是指一個對象容納了多個對象,這個集合對象主要用來管理維護一系列相似的對象。數(shù)組就是一種對象。java.util.*定義了一系列的接口和類,告訴我們用什么類NEW出一個對象,可以進行超越數(shù)組的操作集合框架接口的分類:(分collection接口和map接口)Collection接口Map接口List接口Se

15、t接口SortedMap接口SortedSet接口JAVA中所有與集合有關(guān)的實現(xiàn)類都是這六個接口的實現(xiàn)類。Collection接口:集合中每一個元素為一個對象,這個接口將這些對象組織在一起,形成一維結(jié)構(gòu)。List接口代表按照元素一定的相關(guān)順序來組織(在這個序列中順序是主要的),List接口中數(shù)據(jù)可重復。Set接口是數(shù)學中集合的概念:其元素無序,且不可重復。(正好與List對應)SortedSet會按照數(shù)字將元素排列,為可排序集合。Map接口中每一個元素不是一個對象,而是一個鍵對象和值對象組成的鍵值對(Key-Value)。Key-Value是用一個不可重復的key集合對應可重復的value集合

16、。(典型的例子是字典:通過頁碼的key值找字的value值)。例子:key1-value1;key2-value2;key3-value3.SortedMap:如果一個Map可以根據(jù)key值排序,則稱其為SortedMap。(如字典)!注意數(shù)組和集合的區(qū)別:數(shù)組中能存基本數(shù)據(jù)類型。Collection接口和Map接口只能存對象。以下介紹接口:List接口:(介紹其下的兩個實現(xiàn)類:ArrayList和LinkedList)ArrayList和數(shù)組非常類似,其底層也用數(shù)組組織數(shù)據(jù),ArrayList是動態(tài)可變數(shù)組。底層:指存儲格式。說明ArrayList對象都是存在于數(shù)組中。注:數(shù)組和集合都是從下

17、標0開始。ArrayList有一個add(Object o)方法用于插入數(shù)組。ArrayList的使用:(完成這個程序)先import java.util.*;用ArrayList在一個數(shù)組中添加數(shù)據(jù),并遍歷。ArrayList中數(shù)組的順序與添加順序一致。只有List可用get和size。而Set則不可用(因其無序)。Collection接口都是通過Iterator()(即迭代器)來對Set和List遍歷。通過語句:Iterator it=c.iterator();得到一個迭代器,將集合中所有元素順序排列。然后可以通過interator方法進行遍歷,迭代器有一個游標(指針)指向首位置。Inte

18、rator有hasNext(),用于判斷元素右邊是否還有數(shù)據(jù),返回True說明有。然后就可以調(diào)用next動作。Next()會將游標移到下一個元素,并把它所跨過的元素返回。(這樣就可以對元素進行遍歷)練習:寫一個程序,輸入對象信息,比較基本信息。集合中每一個元素都有對象,如有字符串要經(jīng)過強制類型轉(zhuǎn)換。Collections是工具類,所有方法均為有用方法,且方法為static。有Sort方法用于給List排序。Collections.Sort()分為兩部分,一部分為排序規(guī)則;一部分為排序算法。規(guī)則用來判斷對象;算法是考慮如何排序。對于自定義對象,Sort不知道規(guī)則,所以無法比較。這種情況下一定要定

19、義排序規(guī)則。方式有兩種:java.lang下面有一個接口:Comparable(可比較的)可以讓自定義對象實現(xiàn)一個接口,這個接口只有一個方法comparableTo(Object o)其規(guī)則是當前對象與o對象進行比較,其返回一個int值,系統(tǒng)根據(jù)此值來進行排序。如當前對象o對象,則返回值0;(可將返回值定義為1)如當前對象=o對象,則返回值=0;如當前對象o對象,則返回值0。(可將返回值定義為-1)看TestArraylist的java代碼。我們通過返回值1和-1位置的調(diào)換來實現(xiàn)升序和降序排列的轉(zhuǎn)換。java.util下有一個Comparator(比較器)它擁有compare(),用來比較兩個

20、方法。要生成比較器,則用Sort中Sort(List,List(Compate)第二種方法更靈活,且在運行的時候不用編譯。注意:要想實現(xiàn)comparTo()就必須在主方法中寫上implement comparable.LinkedList接口(在代碼的使用過程中和ArrayList沒有什么區(qū)別)ArrayList底層是object數(shù)組,所以ArrayList具有數(shù)組的查詢速度快的優(yōu)點以及增刪速度慢的缺點。而在LinkedList的底層是一種雙向循環(huán)鏈表。在此鏈表上每一個數(shù)據(jù)節(jié)點都由三部分組成:前指針(指向前面的節(jié)點的位置),數(shù)據(jù),后指針(指向后面的節(jié)點的位置)。最后一個節(jié)點的后指針指向第一個節(jié)

21、點的前指針,形成一個循環(huán)。雙向循環(huán)鏈表的查詢效率低但是增刪效率高。所以LinkedList具有查詢效率低但增刪效率高的特ArrayList和LinkedList在用法上沒有區(qū)別,但是在功能上還是有區(qū)別的。LinkedList經(jīng)常用在增刪操作較多而查詢操作很少的情況下:隊列和堆棧。隊列:先進先出的數(shù)據(jù)結(jié)構(gòu)。堆棧:后進先出的數(shù)據(jù)結(jié)構(gòu)。注意:使用堆棧的時候一定不能提供方法讓不是最后一個元素的元素獲得出棧的機會。LinkedList提供以下方法:(ArrayList無此類方法)addFirst();removeFirst();addLast();removeLast();在堆棧中,push為入棧操作,

22、pop為出棧操作。Push用addFirst();pop用removeFirst(),實現(xiàn)后進先出。用isEmpty()-其父類的方法,來判斷棧是否為空。在隊列中,put為入隊列操作,get為出隊列操作。Put用addFirst(),get用removeLast()實現(xiàn)隊列。List接口的實現(xiàn)類(Vector)(與ArrayList相似,區(qū)別是Vector是重量級的組件,使用使消耗的資源比較多。)結(jié)論:在考慮并發(fā)的情況下用Vector(保證線程的安全)。在不考慮并發(fā)的情況下用ArrayList(不能保證線程的安全)。面試經(jīng)驗(知識點):java.util.stack(stack即為堆棧)的父類

23、為Vector??墒莝tack的父類是最不應該為Vector的。因為Vector的底層是數(shù)組,且Vector有g(shù)et方法(意味著它可能訪問到并不屬于最后一個位置元素的其他元素,很不安全)。對于堆棧和隊列只能用push類和get類。Stack類以后不要輕易使用。!實現(xiàn)堆棧一定要用LinkedList。(在JAVA1.5中,collection有queue來實現(xiàn)隊列。)多線程進程:任務(獨享分配的一塊內(nèi)存空間)任務并發(fā)執(zhí)行是一個宏觀概念,微觀上是串行的。進程的調(diào)度是有OS負責的(有的系統(tǒng)為獨占式,有的系統(tǒng)為共享式,根據(jù)重要性,進程有優(yōu)先級)。由OS將時間分為若干個時間片。JAVA在語言級支持多線程

24、。分配時間的仍然是OS。線程由兩種實現(xiàn)方式:第一種方式:class MyThread extends Threadpublic void run()需要進行執(zhí)行的代碼,如循環(huán)。public class TestThreadmain()Thread t1=new Mythread();T1.start();只有等到所有的線程全部結(jié)束之后,進程才退出。第二種方式:Class MyThread implements RunnablePublic void run()Runnable target=new MyThread();Thread t3=new Thread(target);Thread.s

25、tart();/啟動線程還有就是記住張老給我們說的那個圖,很重要!進程的休眠:Thread sleep(1000);/括號中以毫秒為單位當main()運行完畢,即使在結(jié)束時時間片還沒有用完,CPU也放棄此時間片,繼續(xù)運行其他程序。TryThread.sleep(1000);Catch(Exception e)e.printStackTrace(e);T1.join()表示運行線程放棄執(zhí)行權(quán),進入阻塞狀態(tài)。當t1結(jié)束時,main()可以重新進入運行狀態(tài)。T1.join實際上是把并發(fā)的線程編程并行運行。線程的優(yōu)先級:1-10,越大優(yōu)先級越高,優(yōu)先級越高被OS選中的可能性就越大。(不建議使用,因為不

26、同操作系統(tǒng)的優(yōu)先級并不相同,使得程序不具備跨平臺性,這種優(yōu)先級只是粗略地劃分)。一個使用yield()就馬上交出執(zhí)行權(quán),回到可運行狀態(tài),等待OS的再次調(diào)用鎖標記是對象的概念,加鎖是對對象加鎖,目的是在線程之間進行協(xié)調(diào)。加鎖時應考慮鎖哪個對像?鎖哪段代碼?鎖包含同步變量的類的對像.當用Synchronized修飾某個方法的時候,表示該方法都對當前對象加鎖。給方法加Synchronized和用Synchronized修飾對象的效果是一致的。Synchronized是以犧牲程序運行的效率為代價的,因此應該盡量控制互斥代碼塊的范圍。方法的Synchronized特性本身不會被繼承,只能覆蓋。線程因為未拿到鎖標記而發(fā)生的阻塞不同于前面五個基本

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論