JavaSE知識點總結(個人整理)_第1頁
JavaSE知識點總結(個人整理)_第2頁
JavaSE知識點總結(個人整理)_第3頁
JavaSE知識點總結(個人整理)_第4頁
JavaSE知識點總結(個人整理)_第5頁
已閱讀5頁,還剩20頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2. 面向對象的理解面向對象是Java的基本特征,是軟件開發過程使用的基于面向過程一種思維方式,將功能封裝進對象,強調具備功能的對象和調用結果,不關注具體實現這個功能的過程。面向對象特點:是一種更符合人們思考習慣的思想,可以將復雜的事情簡單化,將程序由執行者轉換成為指揮者。面向對象特性:封裝,繼承,多態封裝:封裝是把數據和方法包裝進類中,隱藏其具體實現細節,對外提供公共訪問方法。封裝的結果是一個同時帶有特征和行為的數據類型。(安全性,復用性)繼承:當一個類的屬性與行為均與現有類相似,屬于現有類的一種時,這一個類可以定義為現有類的子類。或者,當多個類具有相同的屬性和行為,我們可以抽取出共性的內容

2、定義父類,再創建相似的”兄弟”類時只要繼承父類即可。當子類繼承父類后,擁有了父類非私有的方法并可以直接調用。如果認為父類提供的方法不夠強大,子類可以按照子類自身的邏輯重寫繼承過來的父類方法。(復用性,可維護性,多態前提)多態:繼承是多態的前提,多態是指一種事物具有多種形態,比如貓具有貓類的形態,也具有動物的形態,多態的具體表現是父類引用指向子類對象,父類的引用也可以接收自己子類的對象。(可維護性,擴展性)面試:跟我談談什么是面向對象1 面向對象是基于面向過程的2 什么是面向過程什么是面向對象3 面向對象的特點3. 面向對象和面向過程的區別面向過程強調的是功能行為,分析解決問題所需的步驟,以函數

3、為基礎,完成各種步驟的操作和實現。面向對象是基于面向過程的,將功能封裝成對象,強調的是具備了這些功能的對象,讓對象去調用方法來解決問題。面向對象舉例4. abstract與哪些關鍵字不能共存為什么private:私有的方法是不可見的,無法被重寫 final:被final修飾的方法是最終方法,無法被重寫 static:被static修飾的方法,要隨類加載到方法區,由于抽象方法沒有方法體所以不能加載5. static的特點(1) 隨著類的加載而加載;優先于對象存在;被所有對象所共享;可以直接被類名所調用。(2) 靜態方法只能訪問靜態,非靜態方法既可以訪問靜態也可訪問非靜態(3) 靜態方法中不可以定

4、義this、super關鍵字,因為靜態優先于對象存在,this和super所代表的對象還不存在。6. 類與類、類與接口、接口與接口的關系繼承(單繼承,多層繼承,object),實現(多實現),繼承(多繼承)7. final、finally、finalize的區別final:可以修飾類、方法和變量,被final修飾的類無法被繼承,方法無法被重寫,變量為常量只能賦值一次finally:異常處理,和try、catch結合使用,可以添加也可以不添加,用于執行一些必須執行的代碼,如釋放資源等finalize:Object類中的方法,其中定義了對象要被垃圾收集器回收之前要做的相關的清理工作8. 什么是多態

5、,多態的好處和弊端多態可以理解為事物存在的多種體現形態。父類的引用指向了自己的子類對象;父類的引用也可以接收自己子類的對象。提高了程序的可維護性和擴展性弊端:父類的引用只能訪問父類中有的成員而無法調用子類中特有的方法10. wait()和sleep()的區別(1)所在的類不同:wait是Object類中的方法,sleep是Thread類中的方法 (2)sleep方法沒有釋放同步鎖,而wait方法釋放了同步鎖,使得其他線程可以使用。(3)sleep()必須指定時間,wait()可以指定也可以不指定時間。(4)wait,notify和notifyAll只能在同步方法或者同步代碼塊里面使用,而sle

6、ep可以在任何地方使用(5)sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常16. 對匿名內部類的理解匿名內部類就是沒有名字的內部類,是內部類的簡化形式。一般只使用一次的時候使用匿名內部類,匿名內部類本質上是一個匿名子類對象。匿名內部類的使用前提:內部類繼承一個類或實現接口。匿名內部類包括兩個步驟:創建一個類或者接口的子類,即刻創建該子類的對象。簡化書寫。17. IO體系字節流InputStream/OutputStream |-FileInputStream/FileOutputStream:文件字節流,用于文件的讀寫操作 |-BufferedInputSt

7、ream/BufferedOutputStream:加緩沖區的字節流,用于提高效率 字符流Reader/Writer |-FileReader/FileWriter:文件字符流,用于文本文件的讀寫操作 |-BufferedReader/BufferedWrite:加緩沖區的字符流,用于提高效率 轉換流InputStreamReader/OutputStreamWriter:是字節流和字符流之間的橋梁18. 集合體系|-Vector:功能同ArrayList類似,底層也是數組,線程是同步的,所以是安全的,效率較低,數據增長是50%的增長。|-Set:元素是無序的,元素不允許重復,底層用到了Map

8、 |-HashSet:底層hash表,存儲的對象最好復寫hashCode和equals方法,|-TreeSet:底層自平衡的二叉樹,存儲的對象具備比較性,有兩種方法:自然排序、比較器排序|-Collection |-List:元素是有序的,元素允許重復,因為該集合體系都具有索引 |-ArrayList:底層數據結構是數組,查詢速度快,增刪操作較慢,線程不同步|-LinkedList:底層數據結構是鏈表,查詢效率較低,增刪操作快,線程不同步,數據增長是100%的增長。 保證元素不會重復 |-Map:數據是以鍵值對的形式存儲的,有的元素存在映射關系就可以使用該集合,|-HashMap:允許有nul

9、l鍵或值,線程不同步 ,鍵是唯一的|-TreeMap:元素可排序|-HashTable:類似HashMap,不允許有null鍵或值,線程同步,元素不允許重復21. 局部變量和成員變量區別成員變量定義位置:類中,整個類中均可以訪問,通常用private修飾。內存:成員變量隨著對象的建立而建立,存在于對象所在的堆內存中。默認值:成員變量有默認值。回收:隨著對象的回收而回收。局部變量定義位置:定義在局部范圍,如方法內,語句內等。內存:局部變量存在于棧內存中。默認值:沒有默認值。回收:隨著作用域結束而回收,通常為語句或方法范圍。22. 同步函數與同步代碼塊的區別 同步代碼塊使用的鎖可以是任意對象。同步

10、函數使用的鎖是this,靜態同步函數的鎖是該類的字節碼文件對象。在一個類中只有一個同步的話,可以使用同步函數。如果有多同步,必須使用同步代碼塊,來確定不同的鎖。所以同步代碼塊相對靈活一些。23. 數組和集合的區別容器長度:集合長度可變,數組長度固定存儲內容類型:集合存儲引用數據類型,數組存儲任意類型是否可存儲不同類型數據:數組只能存儲同種數據類型的元素,集合可以存儲不同類型(鍵值)的元素。有序可重復:數組是有序可重復的集合中有些是有序可重復的如list,有些是無序不可重復的如set,map24. StringBuffer和StringBuilder的區別StringBuffer是同步的,所以線

11、程安全,但是效率低,StringBuilder是不同步的,所以線程不安全,但是效率高。StringBuilder要比StringBuffer快。單線程的程序使用StringBuilder比較好,多線程的情況下可以自己加鎖,也可以 直接使用StringBuffer。25. String和StringBuffer區別String對象一經創建就不會發生變化了,即便是賦新值也不是在原對象的基礎上改變,而是創建一個新的字符串對象,將引用指向這個新的對象,會造成空間的浪費,效率較低。StringBuffer只創建一個對象,是在同一個實例的基礎之上追加,效率更高,當需要用到String的時候toString

12、就可以了第二部分 知識點26. 說明Java中String str=null與String str=""的區別?String str = null 表示聲明了一個String對象的引用str,但是沒有為其分配內存空間。 String str = "" 表示創建了一個長度等于0的空字符串,并在內存中為其分配了內存空間。String str = new String("tw"); str在內存中有兩個對象,1.堆內存有一個 new Sting2.常量池中有一個字符串。27. 使用運算符"= ="和方法equals()

13、進行比較對象的區別?使用"= ="算符比較基本數據類型時,比較的是值相等;使用"="算符比較對象時,比較的是內存地址值使用equals()方法 比較對象時,比較的是對象的內容,與地址無關,如果沒有重寫equals()方法就直接調用的是Object的equals()方法。28. 接口和抽象類有何區別?(1)成員特點:構造方法:接口沒有構造方法;抽象類有構造方法。成員變量:接口中只有常量;抽象類中可以是常量,也可以是變量。成員方法:接口中只有抽象方法;抽象類中既有抽象方法,也有非抽象方法。(2)關系特點:類與類:類與類之間只有單繼承,可以有多層繼承。類與接口

14、:類與接口之間是實現關系,可以單實現,也可以多實現。 接口與接口:接口與接口之間是繼承關系,可以單繼承,也可以多繼承。(3)設計理念:接口對應的設計模式是簡單工廠設計模式,抽象類對象的設計模式是模板設計模式。(5)必須實現抽象類或接口的所有抽象方法才可以實例化。黑馬程序員入學面試題32. 不借用第三方變量,互換兩個變量。n=nm;m=nm;/(nm)m一個數異或另一個數兩次,還是得原來那個數 n=nm/n(nm)33. 傳統for和增強for有什么區別呢?1. 增強for對集合進行遍歷,集合不能為空。只能獲取集合元素,但是不能對集合進行操作。增強for有一個局限性,必須要有被遍歷的目標。2.

15、迭代器除了遍歷,還可以進行remove集合中元素的動作。如果是用ListIterator,還可以在遍歷過程中進行增刪改查的動作。建議在遍歷數組的時候,還是希望是用傳統for。因為傳統for可以定義角標。1.增強for循環和iterator遍歷的效果是一樣的,也就說增強for循環的內部也就是調用iteratoer實現的,但是增強for循環有些缺點,例如不能在增強循環里動態的刪除集合內容。不能獲取下標等。2.ArrayList由于使用數組實現,因此下標明確,最好使用普通循環。34. Collection和Colections的區別是什么?Collection是一個單列集合的頂層接口,它是List、

16、Set、Queue等接口的父接口。在這個接口中,定義了集合類中通用的方法。Collections是針對集合操作的工具類,有對集合進行排序和二分查找等靜態方法。37. 線程的狀態:線程的五種狀態:1)新建(new) 用new語句創建的線程對處于新建狀態,此時它和其它Java對象一樣,僅僅在Heap中被分配了內存。當一個線程處于新建狀態時,它僅僅是一個空的線程對象,系統不為它分配資源。 Thread t = new Thread(new Runner();2)就緒(Runnable) 程序通過線程對象調用啟動方法start()后,系統會為這個線程分配它運行時所需的除處理器之外的所有系統資源。這時,

17、它處在隨時可以運行的狀態,在隨后的任意時刻,只要它獲得處理器即會進入運行狀態。 t.start()3)運行(Running) 處于這個狀態的線程占用CPU,執行程序代碼。在并發環境中,如果計算機只有一個CPU,那么任何時刻只會有一個線程處于這個狀態。如果計算機中有多個CPU,那么同一時刻可以讓幾個線程占用不同的CPU,使它們都處于運行狀態,只有處于就緒狀態的線程才有機會轉到運行狀態。4)阻塞(Blocked) 阻塞狀態是指線程因為某些原因放棄CPU,暫時停止運行。當線程處于阻塞狀態時,Java虛擬機不會給線程分配CPU,直到線程重新進入就緒狀態,它才有機會轉到運行狀態。阻塞狀態可分為以下3種:

18、位于對象等待池中的阻塞狀態(Blocked in object's wait pool):當線程處于運行狀態時,如果執行了某個對象的wait()方法,Java虛擬機就會把線程放到這個對象的等待池中。位于對象鎖池中的阻塞狀態(Blocked in object's lock pool):當線程處于運行狀態,試圖獲得某個對象的同步鎖時,如果該對象的同步鎖已經被其他線程占用,Java虛擬機就會把這個線程放到這個對象的鎖池中。其他阻塞狀態(Otherwise Blocked):當前線程執行了sleep()方法,或者調用了其他線程的join()方法,或者發出了I/O請求時,就會進入這個狀

19、態。當一個線程執行System.out.println()或者System.in.read()方法時是,就會發出一個I/O請求,該線程放棄CPU,進入阻塞狀態,直到I/O處理完畢,該線程才會恢復執行。5)死亡(Dead) 當線程退出run()方法時,就進入死亡狀態,該線程結束生命周期。線程有可能是正常執行完run()方法而退出,也有可能是遇到異常而退出。不管線程是正常結束還是異常結束,都不會對其他線程造成影響。40. 集合集合名稱閱讀技巧:JDK1.2出現的集合框架中常用的子類對象前綴名是結構名,后綴名是體系名。ArrayList:數組結構,看到Array就知道查詢速度快,看到List就知道可

20、以又重復元素,可以增刪改查LinkedList:鏈表結構,增刪快HashSet:哈希結構,查詢速度更快,不保證有序,不可以重復,必須覆蓋hashCode和equals方法LinkedHashSet:鏈表加哈希結構,可以實現有序TreeSet:二叉樹結構,可以排序。有兩種方法:1.自然排序compable,2.比較器 comparator Java提供了只包含一個compareTo()方法的Comparable接口。這個方法可以個給兩個對象排序。具體來說,它返回負數,0,正數來表明輸入對象小于,等于,大于已經存在的對象。Java提供了包含compare()和equals()兩個方法的Compar

21、ator接口。compare()方法用來給兩個輸入參數排序,返回負數,0,正數表明第一個參數是小于,等于,大于第二個參數。equals()方法需要一個對象作為參數,它用來決定輸入參數是否和comparator相等。只有當輸入參數也是一個comparator并且和當前comparator的排序結果是相同的時候,這個方法才返回true.ArrayList 和Vector都是使用數組方式存儲數據,此數組元素數大于實際存儲的數據以便增加和插入元素,允許直接按序號索引元素. 但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由于使用了synchronized 方法(線程安

22、全),通常性能上較ArrayList 差,Vector屬于遺留容器,現在已經不推薦使用,LinkedList 使用雙向鏈表實現存儲(將內存中零散的內存單元通過附加的引用關聯起來,形成一個可以按序號索引的線性結構,這種鏈式存儲方式與數組的連續存儲方式相比,其實對內存的利用率更高),按序號索引數據需要進行前向或后向遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入速度較快。由于ArrayList和LinkedListed都是非線程安全的,如果需要多個線程操作同一個容器,可以通過工具類Collections中的synchronizedList方法將其轉換成線程安全的容器后再使用(這其實是裝潢模

23、式最好的例子,將已有對象傳入另一個類的構造器中創建新的對象來增加新功能)。Map集合Map(k,v) k:此映射所維護的鍵的類型 v:映射值的類型Map集合:雙例集合,一次存一對,稱為鍵值對。要保證鍵的唯一性。Map集合沒有迭代器,必須先將map集合轉成set集合,在使用迭代器,就可以取出結合中的元素;或者使用map集合特有的entrySet方法,也可以取出map集合中雖有元素。 Map集合常見子類:1.HashTable:底層數據結構是哈希表結構,線程同步的,不允許null鍵,null值;2.HashMap:哈希表結構,不同步,允許null鍵,null值3.TreeMap:二叉樹結構,不同步

24、,可以對map集合眾多鍵進行排序。41. 為什么需要配置path,什么時候需要答:path路徑:是操作系統的環境變量,目的是希望在任意目錄下都能執行該命令操作起來更加方便快捷;classpath是給類提供路徑:想在其他目錄下執行java程序時需要配置classpath路徑。42. IO流輸入流:InputStream 輸出流:OutputStream字節輸入流:FileInputStream 字節輸出流:FileOutoutStream字節輸入流緩沖區:BufferedInputStream 字節輸出流緩沖區:BufferedOutputStream轉換流:InputStreamReader

25、字符輸出流:OutputStreamWriter字符流:FileReader FileWriter字符輸入流緩沖區:BufferedReader 字符輸出流緩沖區:BufferedWriter49. list, set, map是否繼承自collection接口? list,set是 map不是。50. arraylist和vector的區別。一.同步性:vector是線程安全的,也就是說是同步的,而arraylist是線程序不安全的,不是同步的二.數據增長:當需要增長時,vector默認增長為原來一培,而arraylist卻是原來的一半51. hashmap和hashtable的區別一.歷史

26、原因:hashtable是基于陳舊的dictionary類的,hashmap是java 1.2引進的map接口的一個實現二.同步性:hashtable是線程安全的,也就是說是同步的,而hashmap是線程序不安全的,不是同步的三.值:只有hashmap可以讓你將空值作為一個表的條目的key或value7:給成員變量賦值的方式有幾種?分別怎么實現?答:A:給靜態的成員變量賦值(1)可以通過類中的方法給成員變量賦值(私有成員變量的也可以) public void setXXX().(2)可以通過構造方法給成員變量賦值(私有成員變量的也可以)public XXX().(3)可以通過代碼塊完成成員變量

27、的初始化值(私有成員變量的也可以)xxx = .;(4)可以通過類名.成員變量賦值 B:給非靜態的成員變量賦值(1)可以通過類的方法賦值 public void setXXX().(2)可以通過對象調用(3)可以通過代碼塊完成成員變量的初始化值xxx = .; 如何理解字符串一旦初始化就不可以被改變。不可以被改變說的是常量池中的值,并不是引用s(s是可以重新被賦值的)2、String s1 = new String("abc");和String s2 = "abc";兩者的區別第一種方式:第一種方式在內存中存在兩個"abc"字符串,一

28、個是在常量池中,一個是在堆內存當中.第二種方式:在內存中只存在一個"abc"在常量池中.異常:異常是在程序運行過程中,發生的各種不正常狀況。Java中引入異常,以異常類Exception對這些不正常狀況進行封裝,通過異常處理機制對程序運行時可能發生的各種問題進行處理。Throwable頂層類,包括error錯誤,Exception異常,異常分為運行時異常和編譯時異常處理方式:throws聲明拋出,try catch捕捉處理,finally一定會被執行(釋放資源)運行時異常,運行時可能會報錯,可以不處理。編譯時異常,編譯時無法編譯通過,必須處理。throw和throws:th

29、rows表示拋出異常類,由方法調用者使用;throws用在方法聲明后面,跟的是異常類名;throws后可以跟多個異常類名,用逗號隔開。throw用在方法體內,跟的是異常對象名;表示拋出異常,由方法體內的語句處理。只能拋出一個異常對象名;異常注意事項:子類拋出的異常 比父類拋出的異常小。如果父類拋出了多個異常,子類覆蓋父類方法時,只能拋出相同的異常或者是他的子集父類方法沒有拋出異常,子類覆蓋父類該方法時也不可拋出異常。此時子類產生該異常,只能捕獲處理,不能聲明拋出泛型:(提前使用未知數據類型)什么是泛型:泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。這種參數類型可以用在類、接

30、口和方法的創建中,分別稱為泛型類、泛型接口、泛型方法。泛型替代了Object來代表任意類型,在編譯時會擦除。泛型類:定義:類名后<變量> 使用:創建對象時確定類型泛型方法:定義:方法返回值前<變量> 使用:調用方法時確定類型泛型接口:定義:接口名后<變量> 使用:1、定義類時確定類型,2、始終不確定類型,直到創建對象時確定類型泛型優點:提高程序的安全性,將運行期問題轉移到了編譯期,省去了類型強轉的麻煩,優化了程序設計線程:每個運行的程序都是一個進程,在一個進程中還可以有多個執行單元同時運行,這些執行單元均是程序執行的一條條執行路徑,這些執行路徑就是線程,如果

31、希望程序中實現多段程序代碼同時運行,則需要多線程技術。是由cpu高速切換執行,java使用的是搶占式調度模型。1.直接繼承Thread類重寫run方法,2. 線程與線程執行目標分離方式,實現runnable接口,重寫run方法,相比較而言,2避免了1方法單繼承的局限性,且能夠用多個線程操作同一份共享數據,把線程和線程數據有效的分離開,也體現java面向對象思想。此外,還有線程池技術,提交任務,開啟線程。五種狀態:新建狀態:new,可運行狀態:start方法啟動,運行狀態:獲得cpu死亡狀態:run方法執行完,Exception,error等待或阻塞狀態:wait-notify,join-調用j

32、ion的線程終止,sleep-時間到,io阻塞方法如read-阻塞方法返回,等待同步鎖-獲得同步鎖線程安全問題:當多個線程共同操作一份數據時,當線程1操作數據到一半時,線程2搶走CPU,會導致”1使用的數據已經被其他數據修改為1不想要的數據了”。Java中使用synchronized關鍵字來解決,將一個完整動作使用synchronized包裹。即線程A中操作數據的代碼與線程B中操作數據的代碼均使用synchronized包裹,并使用相同的鎖對象。這時線程B會等待線程A中synchronized包裹的代碼執行完畢后再執行,此時線程A已經操作完了代碼,反之線程A也會等待線程B。線程執行目標類成員位

33、置定義多個線程要共享的同一份數據。線程執行目標類成員位置定義多個線程要共享的同一把鎖對象。鎖可以是任意類型的對象,只要多個線程使用同一把鎖就可以使多個線程操作相同數據時同步。死鎖:兩個線程在運行時都在等待對方的鎖,造成了程序的停滯,稱為死鎖。基本數據類型包裝類:基本類型是內置的數據類型,為了使基本數據類型代表的數據使用起來更方便,統一面向對象的思想,Java設計了基本類型包裝類,即每一種基本類型都對應一種引用類型的包裝數據類型。除去整型與字符型,其他基本數據類型將首字母大寫即為包裝數據類型。自動裝箱拆箱:jdk1.5之后裝箱就是把基礎類型封裝成一個類。比如把int封裝成Integer,這時你就

34、不能把他當成一個數了,而是一個類了,對他的操作就需要用它的方法了。拆箱就是把類轉換成基礎類型。比如你算個加法什么的是不能用類的,就得把它轉換成基本類型迭代器:使用迭代器完成集合遍歷的過程是反復獲得集合中元素的過程,通常我們將這個反復獲取的過程叫做迭代。增強for循環底層也是通過迭代器實現的。迭代過程中不能對集合元素進行增刪動作,否則會發生并發修改異常(運行時)遞歸:遞歸就是“在一個方法內可以再次調用自身”遞歸調用必須要在某個條件下結束,否則就是死遞歸。遞歸調用的層次不能太多,否則會堆棧溢出。構造方法不能遞歸調用。四種訪問權限:Private:類訪問級別默認:包訪問級別Protected:子類訪

35、問級別Public:公共訪問級別IO:IO是output和input,是Java中實現程序與設備之間數據交互動作的途徑,java中將這種數據傳輸抽象為流。字節流:頂層父類:outputstream,inputstreamFileoutputstream,Fileinputstream ,bufferedoutputstream,bufferedinputstream字符流:頂層父類:Writer,readerFileWriter,FileReader,BufferedWriter,BufferedReader轉換流:OutputStreamWriter,InputStreamReader字節流

36、和字符流區別:字節流以字節為單位傳輸數據,傳輸的是0101數據,所以可以處理任何數據,字符流是為了方便處理文本數據,通過字符碼表實現字符與二進制數的轉換。常見的字符碼表:ASCII,Unicode,UTF-8,GBK(兼容GB2312并提供更多中文),GB2312匿名內部類:匿名內部類是創建某個類型子類對象的快捷方式。匿名內部類有兩個步驟:臨時定義一個類型的子類定義后即刻創建剛剛定義的這個類的對象匿名內部類就是沒有名字的內部類,是內部類的簡化形式。一般只使用一次的時候使用匿名內部類,匿名內部類本質上是一個匿名子類對象。匿名內部類的使用前提:內部類繼承一個類或實現接口。匿名內部類包括兩個步驟:創

37、建一個類或者接口的子類,即刻創建該子類的對象。簡化書寫。網絡通信協議:在計算機網絡中進行連接和通信的規則。對數據的傳輸格式,傳輸速率,傳輸步驟等有統一的規定,通信雙方需要同時遵守才能完成數據交換。IP地址:網絡通信中計算機設備的唯一標識 端口:用于標識計算機設備中接收數據的網絡應用程序具體是哪一個,有效端口065535,01024為系統端口及保留端口TCP與UDP:UDP:面向無連接,是不可靠協議,不能保證數據完整性,不安全。每個數據報限制在64k以內,發送數據較少,速度快,視頻。TCP:面向連接的通信協議,通過三次握手建立連接通路,是可靠協議,保證數據安全,可進行大量的數據傳輸,速度慢,效率

38、較低。OSI和TCP/IP模型:OSI:應用層,表示層,會話層,傳輸層,網絡層,數據鏈路層,物理層TCP/IP:應用層傳輸層,網際層,主機至網絡層網絡編程:在Internet上的主機一般運行了多個服務軟件,同時提供幾種服務。每種服務都打開一個Socket,并綁定到一個端口上,不同的端口對應于不同的服務。Socket就是為網絡編程提供的一種機制,又叫套接字編程。特點:網絡編程三要素:IP(網絡通信中計算機設備的唯一標識),端口(用于表示計算機中接收網絡數據的應用程序是哪一個),通信協議(客戶端和服務器之間連接和通信的規則,通常使用TCP/IP,三次握手建立連接)通信的兩端都有Socket。網絡通

39、信其實就是Socket間的通信。數據在兩個Socket間通過IO傳輸。Socket編程一般使用TCP與UDP兩種協議,我們主要使用TCP:TCP協議通過三次握手協議將客戶端與服務器端連接,兩端使用各自的Socket對象。Socket對象中包含了IO流,供數據傳輸。數據庫:1.數據庫就是存儲數據的倉庫,其本質是一個文件系統,數據按照特定的格式將數據存儲起來,用戶可以對數據庫中的數據進行增加,修改,刪除及查詢操作。比如MySQL,Oracle,SQLServer,DB2等等。2.數據庫是真正存儲數據的地方。數據庫中以表為組織單位存儲數據,類似于java中的類。根據表字段鎖規定的數據類型,可以向其中

40、添加數據,表中的每條數據類似于對象。SQL語句是用于我們和數據庫進行交互的命令,完成增刪改查等等。數據定義語言: DDL,用來定義數據庫對象:數據庫,表,列等,例如創建、刪除、修改:數據庫、表結構等;數據操作語言: DML,用來對數據庫中表的記錄進行更新,例如:增、刪、改表記錄;數據控制語言:DCL,用來定義數據庫的訪問權限和安全級別,及創建用戶;數據查詢語言:簡稱DQL,用來查詢數據庫中表的記錄。具體命令查文檔JDBC用于完成在Java代碼中操作數據庫。作用:連接數據庫;向數據庫發送SQL語句;操作SQL語句的返回結果JDBC連接數據庫過程:導入mysql的驅動程序jar包通過DriverM

41、anager注冊驅動通過DriverManager獲取連接對象Connection通過Connection獲取一個可以向數據庫發送sql語句的對象Statement通過Statement對象執行sql語句(select) 得到一個結果集ResultSet遍歷結果集ResultSet,得到數據表中的數據釋放資源JDBC優點:Java語言和JDBC結合起來使程序員不必為不同的平臺編寫不同的應用程序,只須寫一遍程序就可以讓它在任何平臺上運行。接口和抽象類:抽象類即不能創建實例的類,僅用來描述一種類型應該具備的基本特征與功能。抽象方法即只有功能聲明,沒有功能主體實現的方法。包含抽象方法的類一定是抽象類

42、。接口是功能的集合,是比抽象類更為抽象的類,同樣是一種數據類型,定義的是一種規則。必須實現抽象類或接口的所有抽象方法才可以實例化。區別:(1)成員特點:構造方法:接口沒有構造方法;抽象類有構造方法。成員變量:接口中只有常量;抽象類中可以是常量,也可以是變量。成員方法:接口中只有抽象方法;抽象類中既有抽象方法,也有非抽象方法。(2)關系特點:類與類:類與類之間只有單繼承,可以有多層繼承。類與接口:類與接口之間是實現關系,可以單實現,也可以多實現。 接口與接口:接口與接口之間是繼承關系,可以單繼承,也可以多繼承。抽象類被繼承體現的是所屬關系is a關系,抽象類中定義的是繼承體系中的共性功能;接口被

43、實現體現的是like a 關系,接口中定義的是繼承體系中的擴展功能。接口特點:Java支持繼承一個類同時實現多個接口。接口可以繼承接口。類可以在繼承一個類的同時,實現多個接口。接口與父類的功能可以重復,均代表要具備某種功能。接口中的成員是固定的:變量修飾符為:public static final(static與final明天講解)方法修飾符為:public abstract(所以重寫接口方法時,必須使用public)方法重寫與方法重載:所謂方法重載是指在一個類中,多個方法的方法名相同,但是參數列表不同。參數列表不同指的是參數個數、參數類型或者參數的順序不同。構造方法就是重載形式存在的。重載注

44、意事項:方法名相同,參數列表不同(參數個數、參數類型或者參數的順序不同),與返回值無關。當子類繼承父類后,擁有了父類非私有的方法并可以直接調用。如果認為父類提供的方法不夠強大,子類可以按照子類自身的邏輯重新定義繼承過來的父類方法,這個重新定義一個方法的過程叫做方法重寫。重寫的結果是子類的方法便將父類的方法覆蓋。一般情況下,繼承就是為了方法重寫,不重寫子類和父類一樣就沒有意義了。Java中方法重寫規則:訪問權限相同或子類方法權限更大方法名稱和參數列表必須相同返回值為基本類型時必須相同返回值為引用類型時相同或子類小構造方法的特點?構造方法的注意事項?構造方法的特點:1.方法名與類名相同2.沒有返回

45、值類型,連void都沒有構造方法注意事項:如果我們沒有給出構造方法,系統將自動提供一個無參構造方法如果我們給出了構造方法,系統將不再提供默認的無參構造方法。注意:這個時候,如果我們還想使用無參數構造方法,就必須自己給出。建議永遠自己給出無參數構造方法。This和super:this:訪問本類對象成員變量調用本類普通方法本類構造方法調用本類其他構造super:訪問本類對象當中的父類成員變量調用本類對象當中的父類普通方法本類構造方法調用父類構造注意:this與super在調用構造方法時,均必須在第一行,只能調用其中的一個。0x2254 new Chinese()thisString address

46、Chinese c = 0x2254棧內存堆內存super String nameint agenull(Angela)0(18)null(北京)3. 對象內存圖For ,while,do while:循環變量作用域 for循環的循環變量其作用域僅限于循環體內,而while循環的循環變量作用域不局限在循環體內。 2.循環條件 for循環的循環條件為空是是死循環,而while循環的循環條件不能為空。3.dowhile無論條件是否滿足,循環體至少執行一次。Break,continue,return:break : (1).結束當前整個循環,執行當前循環下邊的語句。忽略循環體中任何其它語句和循環條件

47、測試。 (2).只能跳出一層循環,如果你的循環是嵌套循環,那么你需要按照你嵌套的層次,逐步使用break來跳出。逐層判斷,逐步跳出 (3).break在循環體內,強行結束循環的執行,也就是結束整個循環過程,不再判斷執行循環的條件是否成立,直接轉向循環語句下面的語句。 (4).當break出現在循環體中的switch語句體內時,其作用只是跳出該switch語句體。 總的來說:就近原則,結束當前的整個循環。 2. continue: 終止本次循環的執行,即跳過當前這次循環中continue語句后尚未執行的語句,接著進行下一次循環條件的判斷。3.return:結束方法,帶參返回一個值給調用者。類與對

48、象的關系:具有相同特征(屬性)和行為(功能)的一類事物的抽象。,體現的是現實事物的映射關系,對象是類的具體實例。類的使用是創建對象,一個類可以有多個對象,可以說創建對象是類最主要的使用方式。String,StringBuffer,StringBuilder:String是不可變的字符序列,String對象一經創建就不會發生變化了,即便是賦新值也不是在原對象的基礎上改變,而是創建一個新的字符串對象,將引用指向這個新的對象,會造成空間的浪費,效率較低。StringBuffer只創建一個對象,是在同一個實例的基礎之上追加,效率更高,當需要用到String的時候toString就可以了StringBu

49、ffer和StringBuilder的區別StringBuffer是同步的,所以線程安全,但是效率低,StringBuilder是不同步的,所以線程不安全,但是效率高。StringBuilder要比StringBuffer快。單線程的程序使用StringBuilder比較好,多線程的情況下可以自己加鎖,也可以 直接使用StringBuffer。什么時候使用字符串緩沖區:數據多,個數無所謂確定,類型無所謂確定,只要最后都轉變成字符串,就用字符串緩沖區。對于三者使用的總結:效率:StringBuilder > StringBuffer > StringString中的對象是不可變的,也可以理解為常量,線程安全,效率低;Stri

溫馨提示

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

評論

0/150

提交評論