JAVA 學習筆記

轉載:牛客吳彥祖
連接:https://www.nowcoder.com/discuss/28656
來源:牛客網java

Java筆記

第一章

  1. Java最大的特色就是能夠在不一樣的平臺環境上運行。
  2. Java Write Once,Run Anywhere!
  3. Java體系結構中立。
  4. Java的版本分爲:JSE 標準版;JEE 企業版;JME 小設備版。
  5. Java與C++的區別:(-3+1)去掉指針,去掉多繼承,去掉運算符重載;增長自動內存分配與回收機制。
  6. Java面向對象的特色:封繼多:封裝、繼承、多態。
  7. Java分佈式:Java的網絡編程如同從文件發送和接收數據同樣簡單。
  8. Java魯棒性:異常處理機制、自動垃圾收集處理來進行內存管理。
  9. Java安全性:不支持指針、沙箱運行模式(Java程序的代碼和數據在必定的空間執行)
  10. Java解釋執行:代碼被編譯爲JVM字節碼,字節碼的執行不依賴硬件配置。這是Java能夠在不一樣平臺上運行的基礎。
  11. javac name.java name.class java name
  12. javac是編譯命令 java是解釋執行命令
  13. package 一個程序最多隻能有1句,且只能放在第一句。
  14. import無關緊要,有必須放在全部的類定義以前。
  15. JVM是運行java字節碼的一臺虛擬機。

第二章

  1. Java採用Unicode字符集,16位, ,支持大部分字符集。
  2. Java標識符不能以數字開頭,名稱與大小寫相關。
  3. 標識符的使用習慣:1名次首字母大寫;2動名詞動詞首字母小寫,名次首字母大寫;3常量全大寫;4變量首字母小寫其餘的大寫。
  4. Java數據類型:8個基本類型:byte、short、int、long、float、double、char、boolean;3個引伸類型:class、interface、數組。
  5. Java中邏輯類型和整數類型不能直接轉換。
  6. final修飾符號常量、其值在賦值以後不能改動。
  7. 類成員變量自動賦初值,局部變量不賦初值報錯,引用做爲類成員自動賦值爲NULL。
  8. Java中取消的操做符:->、*、&、sizeof、其中三個與指針相關。
  9. 基本類型賦值在棧裏;引用類型賦值在堆裏;引用自己位於棧。
  10. 引用直接用==比較的是地址,要比較對象的實際內容,用equal()方法。
  11. Java中邏輯操做符&& || 有短路屏蔽,位操做符& |沒有。
  12. 自動類型轉換:低精度到高精度;高精度到低精度須要強制類型轉換。
  13. Java是結構化程序設計語言:順序結構、選擇結構、循環結構。
  14. switch-case中只能用整型、字符型、枚舉型、字符串。
  15. break跳到最近的}以後;continue跳出當前循環到下一次循環,當是while時直接判斷條件,for還須要進行自加操做。
  16. 帶有Lable的break和continue的區別:break跳到Lable以後跳過最近的{};contine跳到Lable以後進入{}。
  17. return返回結果、返回控制。

第三章

  1. 類變量 實例變量 類方法 實例方。
  2. 類變量、類方法既能用類名,也能用實例名訪問。
  3. 實力變量、實例方法只能用實例名訪問。
  4. 類方法中只能訪問類變量,類方法中不能有this和super指針。
  5. 訪問權限:public、protected、包(默認)、private。
  6. protected:1本身用;2子類用;3同一包中用。
  7. 不一樣訪問權限的訪問個體有:1類;2包;3子類;4不一樣包中的非子類。
  8. 構造方法是一個特殊的方法,與類名相同,無返回類型,經過new()調用。
  9. Java中沒有析構函數,系統自動回收垃圾,對於不是經過new()申請的空間,用終結處理方法finalize()
  10. 對象的聲明(標識符);實例化(用new分配空間);初始化(賦值)。
  11. 棧:基本類型和對象引用 堆:全部的Java對象,用new產生的數據。
  12. 類成員的初始化順序:1靜態成員;2組合對象成員;3類自己其餘成員。
  13. 靜態成員只初始化一次。
  14. Java包有必定的層次,對應外存上的目錄結構,同一包中不能有相同的類名。
  15. 程序中沒有package語句時,放入默認包中。
  16. 一個編譯單元只能有一個公共類public class,公共類名與文件名相同,還能夠有多個支持類。
  17. 導入的兩個包中有同名類時,使用時用全名來區分。
  18. 爲導入包而用類庫中的類時,用全名引用;自定義的包,java+類名。
  19. java.lang 自動加載的默認包:基本數據的封裝類、數學函數、字符串、線程等。
  20. java.util 工具類庫:日期、日曆、堆棧、向量、集合、哈希集。
  21. Object類:在lang包中,全部類的基類、定義全部類應有的公共函數。
  22. System類:在lang包中,不能實例化,全部方法都可直接引用,與系統屬性相關。
  23. Math類:在lang包中,靜態方法,不聲明爲實例,經常使用Math.PI、Math.E。
  24. String類:在lang包中,字符常量,不用new建立時由棧中引用指向常量池(不重複);用new建立時可重複。Substring截取中間一段,trim去掉兩端空格。
  25. StringBuilder、StringBuffer:對於常常要修改的字符串,StringBuilder效率高於StringBuffer,StringBuffer在線程上是安全的,在大多實現過程當中,StringBuilder要比StringBuffer快。
  26. String至關於字符中的常量,只要值變化,內存空間就變化。
  27. StringBuffer中的方法:append to追加、insert插入、delete刪除、reverse反轉。

第四章

  1. toString()函數,每一個非基本類型中都有,未重寫時默認輸出爲對象的內存地址。
  2. 組合:黑盒複用,依賴關係少,高效、動態。
  3. 繼承:白盒複用,黏度高,易維護,破壞封裝。
  4. 優先用組合。
  5. super出如今構造方法中必須在第一行。
  6. 重寫:子類修改父類已有的方法(覆蓋),重寫的方法名、返回類型、參數類型必須徹底相同,且被重寫的方法不能有更嚴格的訪問權限,發生在多態中,無新受檢異常。
  7. 重載:同一類中方法名相同參數列表不一樣,只能經過參數列表重載,不能經過訪問權限、返回類型、拋出異常重載;重載能夠有不一樣的返回類型、訪問權限、異常,可是不做爲重載的標誌。
  8. 抽象類abstract抽象類不能實例化,類中有抽象方法,abstract class a1{abstract void test();}函數聲明以後有{}就算實現。
  9. 構造方法、靜態方法、final方法不能使用abstract修飾。
  10. 接口默認爲抽象類,實際上接口是抽象抽象類。
  11. final類不能被繼承,所以final類中的成員函數沒有機會被覆蓋,默認都是final的。
  12. final方法:若是一個類不容許其子類覆蓋某個方法,將這個方法聲明爲final。
  13. 將類方法聲明爲final更加高效,編譯時綁定,靜態綁定。
  14. final變量常量,修飾的成員的值一旦給定就沒法改變:靜態變量、實例變量、局部變量。
  15. static和final變量可以自動賦值爲默認值。
  16. this()本類的構造函數 this.本類的變量或方法
    Super()超類的構造函數 super.超類的變量或方法
  17. 子類和超類有重名變量時,用this和super區分。
  18. 向上轉型:子類轉型爲超類;超類的引用指向子類的對象。
  19. 超類的引用不能調用:1子類中定義而超類中沒有定義的方法;2子類重寫的方法。
  20. 只能將子類類型的引用賦值給超類類型的引用。
  21. 每一個類實例對象都自帶一個虛函數表,這個表中存儲的是指向虛函數的指針。
  22. 超類和子類中都有的方法,纔有多態的動態綁定問題。
  23. 重寫的重要特徵:除了函數的實現之外其餘部分都相同;覆蓋:均相同才能覆蓋。
  24. Java中全部的成員方法都包含在虛表中,而C++中只有聲明爲virtual纔是虛函數。
  25. 動態綁定和靜態綁定的適用條件:靜態:private、static、final、構造函數。
  26. 動態綁定的過程當中,先在對象的實際類型的虛表中匹配,找不到的話再上溯到它的基類的虛表中找。
  27. this指針始終指的都是實際類型。
  28. 動態綁定指的是成員方法,成員變量始終都是靜態綁定。
  29. 想要動態的調用變量成員,將變量成員封裝在方法中返回。
  30. 重寫是覆蓋,同名的方法僅有一個;重載是並列,哪一個參數匹配調用哪一個。
  31. 多態的三種實現方式:1繼承實現;2抽象類實現;3接口實現。
  32. 接口中只有常量和抽象方法。
  33. Java接口中的成員變量默認都是public static final類型的,這些關鍵字均可以省略,可是必須初始化。
  34. Java接口中的方法默認都是public abstract類型,不能有方法體,不能實現。
  35. 抽象類和接口的區別:抽象類中能夠有寫實的方法,但至少要有一個方法是抽象的;接口中全部的方法都必須是抽象的。
  36. Java接口中只能包含public static final成員變量和public abstract成員方法。
  37. 接口繼承接口,類實現接口,類繼承類。
  38. Java接口必須經過類來實現。
  39. 類實現接口時,當全部的方法沒有所有被寫實時,類應該聲明爲抽象類。
  40. 不容許建立接口實例,可是容許定義接口的引用指向實現了該接口的類實例對象。(相似於向上轉型)
  41. 抽象類只能在繼承體系中實現,而接口能夠任意實現。
  42. 接口中的常量能夠是不定常量,其值會在第一次訪問是創建,而後保持不變。
  43. 內部類的訪問權限控制符有:public、default、protected、private,嵌套內部類static。
  44. 建立非靜態內部類時,必定要先建立其相應的外部類對象。
  45. outerclass.innnerclass innerobject=outerobject.new innerclass()
  46. 建立嵌套類對象時,不須要建立其外部類對象。
  47. outerclass.innnerclass innerobject=outerclass.new innerclass()
  48. 靜態內部類不能訪問外部類的非靜態成員。
  49. 局部內部類:定義在一個方法或一個語句塊中。
  50. 局部內部類訪問外部類的局部變量時,只能訪問final類型的。
  51. 局部內部類的訪問優先級:內部類>外部類>局部final變量。
  52. 內部類的做用:容許protected和private權限,實現更小層次的封裝。
  53. 內部類通常與接口聯合使用,更好的實現多重繼承。
  54. 匿名內部類:new 接口名(){} new 超類名(){}
  55. 內部類編譯時生成的.class文件outerclassname$innerclassname.class 匿名內部類outerclassname$#.class #爲數字,從1開始,每生成一個,數字遞增1。
  56. 在內部類中調用this和new返回一個外部類時的不一樣,this獲得的是建立該內部類的外部類對象的引用;而new建立一個新的引用。
  57. 有內部類的實例做爲外部類的成員時,構造該外部類時,先建立內部類的成員實例,再建立外部類實例的其餘成員。(至關於組合關係)
  58. 一個外部類的內部類被另外一個類繼承時,在該子類的構造方法中用外部類的一個實例調用超類的構造函數。Outerobject.super()。
  59. 通常的super()調用默認的都是extends類名中的構造函數。
  60. class son extends father{super();}
  61. class son extends father.innerclass{fatherobject.super();}

第五章

  1. AWT:重量級控件:靠本地方法實現其功能,不一樣的平臺上不統一。
  2. Swing:輕量級控件:提供了AWT的全部功能,並大幅擴充。
  3. Swing中除了JFrame、JApplet、JDialog、JWindow以外都是輕量級控件。
  4. Button在AWT中,JButton在Swing中;其餘的名稱相似。
  5. Java採用向容器中添加組件的方式構建圖形界面,一般用頂級容器做爲全部組件的承載物。
  6. 容器之間能夠徹底嵌套。
  7. GUI組件分爲:容器類、控件類、輔助類。
  8. 經常使用的組件及相關函數
    JFrame(窗口):setsize、setvisible、setlocation、setdefaultcloseoperation、getcontentpane
    JButton(按鈕):settext、seticon、setbounds、addactionlistener
    JLable(標籤):settext、seticon、settooltiptext、sethorizontextposition
    JTextField(文本框):addactionlistener、setcolums、settext
    JRadioButton(單選框);JDialog(對話框);JFileChooser(文件對話框);JComboBox(組合框):JTextField(文本域)、JMenu(菜單)。
  9. 佈局管理:Container中有一個方法交setLayout()
  10. 不一樣的佈局方式有:1BorderLayout;2FlowLayout;3GridLayout
  11. BorderLayout是JFrame的默認佈局,組件分爲5個區域,東西南北中。
  12. add(位置,組件)
  13. FlowLayout順序佈局:從左到右、從上到下、
  14. GridLayout網格佈局:組件在網格中從左到右、從上到下。
  15. 事件處理:1事件;2源事件;3事件處理者。
  16. 事件處理的步驟:1註冊事件監聽器;2外部做用於事件源;3生成事件對象;4將事件對象傳給事件處理器;5事件處理器進行處理。
  17. 定義監聽器:actionPerformed、new建立監聽器對象、註冊監聽器add***actionlistener()
  18. 監聽器的三種實現方式:1實現註冊寫實;2內部類;3匿名內部類的實現。
  19. GUI編程中要用的三個包:import java.awt.;import javax.swing.;import java.awt.event.*。
  20. 適配器:Adapter:適配器產生的必要性:接口中有不少抽象函數未寫實,當要用到其中的某個功能時,須要所有寫實,帶來不便;適配器實現了全部方法卻不作任何事情,可被繼承而後只需寫實要用到的那個方法而不用管其餘方法。
  21. 適配器是處於接口和類之間的一個過渡性產物,省去不少實現的麻煩。

第六章

  1. 異常的分類:1Exception通過處理能恢復正常,不中斷現有程序;2Error沒法恢復必須中斷現行程序退出。
  2. 常見的異常:ArithmeticExption數學異常、OutofMemory內存溢出異常、NullPointerExption空指針異常、IndexOutofMemoryExption下標邊界異常。
  3. 錯誤由JVM拋出。
  4. 異常分爲受檢異常和不受檢異常:1不受檢異常(編譯器可處理):不要求程序員處理,最終可從main()拋出並用printStackTrace()通常是邏輯錯誤,包括RuntimeException和Error及其子類;2受檢異常:強制程序員檢測和處理。
  5. 異常的處理方法:1用try-catch-finally結構捕獲和處理;2將異常層層向上拋直至轉交給JVM處理。
  6. 多個catch塊時只會匹配其中一個異常類並執行catch的代碼,catch匹配的順序是從上到下。
  7. 不管try語句塊是否發生異常,finally語句塊都是要執行的。
  8. try-catch-finally三個語句塊不能單獨使用,可組成try-catch-finally、try-catch、try-finally三種結構,catch塊能夠有多個,finally塊只能有一個。
  9. try-catch-finally塊中的變量的做用域爲語句塊內部,分別獨立不能相互訪問。
  10. catch塊的參數有父子關係時,子類在前,父類在後。
  11. 返回類型+函數名稱+形參列表+throws Exception{}
  12. 異常傳遞鏈:不處理不執行,方法在拋出異常的地方退出,不想終止方法就用try來捕獲異常。
  13. 自定義異常在構造函數中super()來調用Exception類的構造函數。
  14. throws方法聲明時放在方法中,throw在方法體中,在一個具體的動做。
  15. 若是拋出的異常一直未被處理,沿函數一直往上拋,從主函數中拋出以後由JVM處理,此時能夠調用printStackTrace()打印這一異常所在的位置、類型等信息。

第七章

  1. Java中數組的下標從0開始編號,數組中除了元素以外還存在惟一的可被訪問的屬性length。
  2. 數組聲明:類型[]數組名 類型 數組名[] []表示數組類型
  3. 數組的初始化:靜態初始化、動態初始化。
  4. 靜態初始化:[]中沒有數字,各個元素的值顯性給出。
  5. 動態初始化:[]中有數字或變量,用關鍵字new,數組中各個元素能夠自動賦值。
  6. new申請空間時在堆上,在堆上都可自動賦值。
  7. 對象數組的初始化:類型[]數組名=new 類型{new 構造方法()…}
  8. 對於大型的數組或對象數組,通常結合循環語句來賦值。
  9. 多維數組:n維數組中存放着n-1維數組的引用。
  10. 不規則數組:數組元素引用的數組長度不等:a.length指的是第一維數組長度;a[i].length指的是對應維數數組的長度。
  11. 數組是一個特殊的對象,數組名存放一個對象的引用。
  12. 數組名實質是一個引用,因此能夠做爲參數。
  13. 數組工具類:Arrays,類函數:copyof數組中的值拷貝;sort升序排序;binarysearch查找特定值;equals判斷兩個數組是否相等。
  14. 對象比較接口:java.lang.comparable int compareTo(Object o)
    java.util.comparator int compare(Object o1, Object o2)
  15. 一個類用sort比較大小時,自動調用compareTo方法比較大小。
  16. 枚舉:有限的、不變的值的集合。
  17. enum類型變量只能保存聲明時給定的枚舉值。
  18. 數組:靜態容量,容量的一開始就定了。
  19. 類集Collection,是動態容量:有兩個子集:1List對象有順序,容許重複;2Set無序,不能重複。
  20. Map映射:鍵值對,鍵是惟一的,值能夠重複。
  21. List:(有順序,靠下標索引)ArrayList LinkedList
  22. List l=new ArrayList(),改變集合類型時代碼不用變化,相似於接口引用一個實現了它的類,當使用類特有的方法時,不能用接口定義,而應該使用具體的類。
  23. ArrayList數組內部維護了一個Object類型的數組;LinkedList內部維護了一個有頭結點的雙向鏈表。
  24. 使用LinkedList能夠很簡單的構造堆棧、隊列,addFirst、addLast、getFirst、getLast、removeFirst。
  25. 泛型,C++中的模版,聲明泛型時,使用尖括號指定類型參數,應用時用具體的類型填入類型參數。
  26. 泛型:類模版、函數模版。
  27. 聲明 class 類名 <類型參數列表> {}
  28. 應用 類名 <具體的類型列表> 變量名=new類名 <具體的類型列表> (構造函數的參數列表)。
  29. 類、接口、方法都能使用泛型。
  30. 集合Set:不容許重複,無下標索引,經常使用的集合HashSet、TreeSet、LinkedHashSet。
  31. system.out.println(set)用結合做爲參數能直接輸出結合中的元素,輸出形式爲[…,…,…]
  32. 迭代器:Iterator設計模式、對象,特別爲遍歷無索引的集合而準備。
  33. Iterator中的函數:next()首次使用時,返回序列的第一個元素,以後得到序列中的下一個元素並向後移;hasnext()判斷是否有下一個。
  34. 迭代器的使用:判斷it.hasnext();取出類型=it.next()
  35. for-each遍歷,對迭代器進行了包裝,代碼更加簡潔,只能遍歷兩種類型:1數組;2實現了Iterator接口的實例。
  36. 哈希集:HashSet:用哈希表和哈希算法實現快速查找,折中了數組和鏈表,內部維護了一個鏈表數組,擁有常數查找時間,要求對象重寫hashCode、和equal方法。
  37. 哈希表相似於鄰接表,散列、Cache映射尋址中的組相連。
  38. 哈希表工做的兩大步驟:1得到哈希碼,算出該插入哪一個鏈表;2在鏈表上比較。
  39. 容量:鏈表數組的大小,載入因子,重構的條件;當元素數目>容量*載入因子時,重構翻倍。
  40. HashSet中沒有相同的元素,因此內容equals的對象,hashcode必定也相等,hashcode不相等的兩個對象必定不equals。
  41. hashcode默認返回的是內存地址,equals默認比較的也是內存地址。
  42. 哈希集中通常選一個不重複的關鍵詞做爲哈希碼。
  43. TreeSet元素間有序但不能重複,,自平衡二叉樹,必須實現comparable和compator接口來比較,寫實equal保證惟一性,查找效率爲 。
  44. LinkedHashSet哈希集+鏈表,在HashSet基礎上將元素串起來,元素有序。
  45. 輸入同一組數據,用不一樣的集輸出,HashSet元素存放無序,LinkedHashSet保持添加順序,TreeSet按排序存放。
  46. key-value關係對的無序容器,鍵值均爲對象,鍵值對也爲對象。
  47. 一個映射Map中不能有相同的key,每一個key只能有一個value
  48. Map不能用迭代器,無序,沒法索引。
  49. 遍歷Map時,經過將映射轉換爲鍵或值來進行遍歷。
  50. List Set Map爲接口,不能實例化。
  51. 泛型<>的位置,函數:在訪問控制符以後,類,接口在名稱以後。理解:必須在可能出現類型的地方以前
  52. collection是list和set的父類,collection工具類,靜態類,有經常使用的操做。

第八章

  1. 建立好的輸入輸出系統是艱難的工做:1與不一樣的源和目的端進行交互;2以不一樣的方式進行通訊;3大多數I/O須要異常處理。
  2. Java經過各類封裝的流類完成輸入輸出工做。
  3. 流:想象中無限長的數據序列1輸入流輸出流;2字符流字節流;3節點流處理流。
  4. 字節輸入:InputStream、字節輸出OutputStream、字符輸入Reader、字符輸出Writer。
  5. ByteArrayInputStream:將內存的緩衝區來看成InputStream使用。
  6. StringBufferInputStream:將String轉換成InputStream。
  7. FileInputStream:從文件中讀取信息。
  8. PipedInputStream:產生用於寫入相關數據,實現管道化。
  9. ObjectInputStream:對象序列化輸入流。
  10. SequenceInputStream:將兩個或多個InputStream對象轉換成單一的InputStream。
  11. DataInputStream:從流中讀取基本的數據類型(int char long…)
  12. BufferedInputStream:使用緩衝區讀入,防止每次讀取都要進行操做破壞硬盤。
  13. LineNumberInputStream:跟蹤輸入流的行號。
  14. 節點流:從特殊位置讀寫的基本功能。
  15. 處理流:結合其餘流的基礎上,修改管理數據並提供額外功能。
  16. 常見的處理流:1緩衝Buffered;2過濾:Filter;3轉換InputStreamReader;4對象序列化ObjectInputStream;5打印PrintStream。
  17. 緩衝流:不直接讀寫,對硬盤損害小,嵌套在其餘節點流之上,提升效率。
  18. 緩衝流在構造時,通常有兩個參數:1要包裝的流類;2要緩衝的數據的大小。
  19. mark標記流中當前的位置;reset定位到最近的標記點;readline讀一行;flush刷新。
  20. 打印流,不拋異常,自動刷新。
  21. 數據流:支持基本類型的輸入輸出,繼承自InputStream、OutputStream。
  22. 流的難點在於:搞清格流之間的關係,流之間如何嵌套,如何用一個流若爲參數來構造另外一個流。
  23. 處理流須要在節點流的基礎上封裝構造,因此識別基本的節點流和處理流是一項基本功。
  24. 處理流在使用完畢以後要調用close函數,處理流是動態的,不關一直起做用。
  25. 標準I/O流,System.in鍵盤輸入;System.out屏幕輸出;System.err錯誤輸出。
  26. 各類流類的嵌套定義和初始化時遵循一個原則,簡單的被複雜的嵌套,簡單的做爲複雜的參數。
  27. Scanner類:掃描輸入文本,除了可用正則表達式以外,還可分析字符串和基本類型。
  28. Scanner的使用: Scanner s=new Scanner(System.in) int ss=s.nextInt()
  29. 使用輸入輸出時導入一個包import java.io.*;
  30. 使用Scanner是import java.util.*;
  31. 文件輸入輸出流:FileInputStream、FileOutputStream 、FileReader、FileWriter。
  32. File類的構造:public File(String pathname)相對路徑、絕對路徑、父路徑、子路徑。
  33. mkdir建立文件夾 mkdirs在不存在爲文件中建立文件夾
  34. 有關文件的輸入輸出:int b=0,while((b=in.reader()!=-1)){}
  35. 隨機訪問文件:適用於大小已知的記錄組成的文件,seek到指定位置,getFilePointer獲得當前指針位置。
  36. length判斷文件大小。
  37. RandomAccessFile生成隨機訪問文件。

第九章

  1. 系統級併發,單個的一段程序執行控制流稱爲線程。
  2. 多線程:一個程序內有多個相同或不一樣的線程或執行不一樣的任務。
  3. 多線程的做用:1提升UI的響應速度;2提升硬件資源的利用率;3隔離高速硬件和低速硬件;4提供程序上的隔離不一樣的運行模塊。
  4. 實現多線程的程序設計關鍵:得到Thread實例,重寫run方法,調用start方法開始線程並分配資源。
  5. 從run方法中返回是退出線程惟一正確的方法。
  6. start是線程從系統外分配資源,run是線程得到資源後要進行的工做。
  7. 線程類Thread是Object的直接子類,成員屬性:PRIORITY優先級。
  8. Thread的成員方法:sleep休眠指定的秒數,start啓動線程,yield掛起暫停,run執行,notify喚醒。
  9. isLive判斷線程是否處於活動狀態,getName返回線程名稱,currentThread返回正在執行的線程的引用。
  10. 繼承Thread:1繼承Thread類;2重寫run方法;3new建立新對象;4調用start啓動線程。
  11. 線程的不肯定性:同一線程內執行的順序是必定的,多個線程執行順序有多種組合。
  12. 用繼承Thread類的方式實現多線程,被Java多繼承的限制不能再繼承別的類。
  13. 用實現Runnable方法實現多線程:(更加通用的多線程方法),1實現Runnable方法;2重寫public void run(){};3用new來實例新對象;4調用start啓動線程。
  14. 經過繼承和實現兩種方法造成的線程類在使用時有區別:1繼承實現的線程類能直接實例化;2經過實現的線程類實例化以後做爲new Thread()的參數。
  15. 線程的生命週期:出生、就緒、運行、休眠、等待、阻塞、死亡。
  16. 兩個線程的依賴關係:某格線程在另外一個線程終止時才能繼續執行,可調用另外一個join的方法當另外一個線程死亡時,該線程從等待態進入就緒態。
  17. 線程被建立時,從父線程中繼承優先級,建立以後也能改變優先級。
  18. 優先級定義分爲10級。
  19. 線程優先級的做用:方便操做系統的調度,優先級相同且不實用分時技術時,一個運行完才運行下一個,除非他本身變爲其餘狀態。
    20 兩個線程同時訪問一個成員,形成對共享數據的衝突,形成一致破壞,爲保證數據的一致性,引入同步鎖sunchronized
  20. 同步分爲方法同步和語句同步,方法同步在函數類型以前加sunchronized;語句同步在{}以前加sunchronized。
  21. 協做機制:生產者消費者模型。
  22. 死鎖的解決:1邏輯隔離:每一個同步區使用各自的鎖;2儘快釋放:使用完儘快釋放鎖對象;3按順序申請:用到多格鎖對象的申請一致。

第十章

  1. 數據庫的組成:數據庫、數據庫管理系統、應用系統、數據庫管理員、數據庫用戶。
  2. 數據類型:網狀模型、層次模型、關係模型。
  3. 關係模型數據庫是目前最流行的數據庫。
  4. 數據庫的數據有最小的冗餘度和較高的數據和程序獨立。
  5. SQL語言,常見的SQL查詢命令
    查詢:selsct…from…where
    操縱:insert、updata、delete
    定義:creat、alter、drop
  6. JDBC是爲了JAVA專門和數據庫交互的一套接口,用於執行SQL語句的JavaAPI。
  7. JDBC的基本功能:1加載JDBC驅動程序;2創建與數據庫的聯繫;3使用SQL語言進行數據庫操做和處理結果;4關閉相關連接。
  8. 寫數據庫程序要導入的包:import java.sql.*。
相關文章
相關標籤/搜索