北京圣思園java課堂筆記_第1頁
北京圣思園java課堂筆記_第2頁
北京圣思園java課堂筆記_第3頁
北京圣思園java課堂筆記_第4頁
北京圣思園java課堂筆記_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1 .類是一種抽象的概念,對象是類的一種具體表示形式,是具體的概念。先有類,然后由類來生成對象(Object)。對象又叫做實例(Instance)。2 .類由兩大部分構成:屬性以及方法。屬性一般用名詞來表示,方法一般用動詞來表示。3 .如果一個java源文件中定義了多個類,那么這些類中最多只能有一個類是public的,換句話說,定義的多個類可以都不是public的。4 .在Java中進行方法的參數(shù)傳遞時,無論傳遞的是原生數(shù)據(jù)類型還是引用類型,參數(shù)傳遞方式統(tǒng)一是傳值(passbyvalue)。Java中沒有傳引用(passbyreference)的概念。5 .方法重載(Overload)。表示兩

2、個或多個方法名字相同,但方法參數(shù)不同。方法參數(shù)不同有兩層含義:1)參數(shù)個數(shù)不同。2)參數(shù)類型不同。注意:方法的返回值對重載沒有任何影響。6 .構造方法重載:只需看參數(shù)即可。如果想在一個構造方法中調(diào)用另外一個構造方法,那么可以使用this()的方式調(diào)用,this()括號中的參數(shù)表示目標構造方法的參數(shù)。this()必須要作為構造方法的第一條語句,換句話說,this()之前不能有任何可執(zhí)行的代碼。7 .繼承(Inheritence):Java是單繼承的,意味著一個類只能從另一個類繼承(被繼承的類叫做父類【基類,baseclass,繼承的類叫做子類),Java中的繼承使用extends關鍵字。8 .當

3、生成子類對象時,Java默認首先調(diào)用父類的不帶參數(shù)的構造方法,然后執(zhí)行該構造方法,生成父類的對象。接下來,再去調(diào)用子類的構造方法,生成子類的對象?!疽肷勺宇惖膶ο?,首先需要生成父類的對象,沒有父類對象就沒有子類對象。比如說:沒有父親,就沒有孩子】。9 .super關鍵字:super表示對父類對象的引用。10 .如果子類使用super()顯式調(diào)用父類的某個構造方法,那么在執(zhí)行的時候就會尋找與super()所對應的構造方法而不會再去尋找父類的不帶參數(shù)的構造方法。與this一樣,super也必須要作為構造方法的第一條執(zhí)行語句,前面不能有其他可執(zhí)行語句。11 .關于繼承的3點:a)父類有的,子類也

4、有b)父類沒有的,子類可以增加c)父類有的,子類可以改變12 .關于繼承的注意事項a)構造方法不能被繼承b)方法和屬性可以被繼承c)子類的構造方法隱式地調(diào)用父類的不帶參數(shù)的構造方法d)當父類沒有不帶參數(shù)的構造方法時,子類需要使用super來顯式地調(diào)用父類的構造方法,super指的是對父類的引用e)super關鍵字必須是構造方法中的第一行語句。13 .方法重寫(Override):又叫做覆寫,子類與父類的方法返回類型一樣、方法名稱一樣,參數(shù)一樣,這樣我們說子類與父類的方法構成了重寫關系。14 .方法重寫與方法重載之間的關系:重載發(fā)生在同一個類內(nèi)部的兩個或多個方法。重寫發(fā)生在父類與子類之間。15

5、.當兩個方法形成重寫關系時,可以在子類方法中通過super.run()形式調(diào)用父類的run()方法,其中super.run()不必放在第一行語句,因此此時父類對象已經(jīng)構造完畢,先調(diào)用父類的run()方法還是先調(diào)用子類的run()方法是根據(jù)程序的邏輯決定的。16 .在定義一個類的時候,如果沒有顯式指定該類的父類,那么該類就會繼承于java.lang.Object類(JDKl供的一個類,Object類是Java中所有類的直接或間接父類)。17 .多態(tài)(Polymorphism):我們說子類就是父類(玫瑰是花,男人是人),因此多態(tài)的意思就是:父類型的引用可以指向子類的對象。1. 多態(tài):父類型的引用可

6、以指向子對象。2. Parentp=newChild();當使用多態(tài)方式調(diào)法時,首先檢查父類中是否有ssing()方法,3. 一共有兩種類型的強制轉換:a)向上類型轉換(向上類型轉換(upcastupcastupcastupcastupcast):比如說將):比如說將):比如說將CatCat類型轉換為AnimalAnimal類型,即將子類型,即將子轉換為父類型。對于向上,不需要顯式指定b)向下類型轉換(向下類型轉換(downcastdowncastdowncastdowncastdowncastdowncastdowncast):比如將):比如將):對于向下,必須要顯式指定轉換為子類型。對4

7、.抽象類(抽象類(abstractclass):使用了abstract關鍵字所修飾的類叫做抽象。抽象類無法實例化,也就是說不能newnew出來一個抽象類的對(實例)。5 .抽象方法(abstractmeth):使用abstractt關鍵字所修飾的方法叫做抽方法之前所定義的叫。相對于抽象方法,之前所定義的叫。相對于抽象方法,之前所定義的叫做具體方法(有聲明,實現(xiàn))。6 .如果一個類包含了抽象方法,那么這定是抽象類。7 .如果某個類是抽象,那么該可以包含具體方法(有聲明、實現(xiàn))。如果某個類是抽象,那么該可以包含具體方法(有聲明、實現(xiàn))。8 .如果一個類中包含了抽象方法,那么這定要聲明成abstra

8、ctclass也就是說,該類一定抽象;反之如果某個該類包含抽象方法,9 .無論何種情況,只要一個類是抽象那么這就法實例化。10 .在子類繼承父(是個抽象)的情況下,那么該子類必須要實現(xiàn)中所定義的所有抽象方法;否則,該子類需要聲明成一個abstractclass。11 .接口(interface):接口的地位等同于接口的地位等同于class,接口中的所有方法都是抽象方法。在聲明接口中的方法時,可以使用abstract關鍵字,也可以不使用。通常情況下,都會省略掉abstract關鍵字。12 .可以將接口看作是特殊的抽象類(類中沒有具體方法,13 .類可以實現(xiàn)接口。實現(xiàn)使用關鍵字實現(xiàn)使用關鍵字imp

9、lements表示某個類實現(xiàn)某個接口。14 .一個類實現(xiàn)了某接口,那么該類必須要實現(xiàn)接口中聲明的所有方法。如果一15 .Java是單繼承的,也就說某個類只能有唯一父;可以實現(xiàn)多個接口,多之間使用逗號分隔。16 .多態(tài):所謂,就是父類型的引用可以指向子對象或者類例。關于接口與實現(xiàn)的類之間強制類型之間的強完全一樣。17 .static關鍵字:可以用于修飾屬性,也方法還可以用于修飾屬性,也方法還類(后面的課程講)18 .statictatictatictatic修飾屬性:無論一個類生成了多少對象,所有這些共同使用唯一份靜態(tài)的成員變量;值也會隨之發(fā)生化。如果一個成員變量是staticc的,那么我們可以

10、通過類名.成員變量名的方式來使用它19 .staticstaticstaticstaticstatic修飾方法:static修飾的方法叫做靜態(tài)。對于靜態(tài)方法來說,可以使用類名.方法名的方式來訪問。20 .靜態(tài)方法只能繼承,不重寫(Override)。21 .final關鍵字:final可以修飾屬性、方法,類。22 .final修飾類:當一個類被final所修飾時,表示該類是一個終態(tài)即不能被繼承。23 .final修飾方法:當一個方法被finall所修飾時,表示該方法是一個終態(tài)所修飾時,表示該方法是一個終態(tài)即不能被重寫(Override)。24 final修飾屬性:當一個屬性被當一個屬性被fin

11、al所修飾時,表示該屬性不能被改寫。25 .當final修飾一個原生數(shù)據(jù)類型時,表示該的值不能發(fā)變化(比如說不能從10變?yōu)?0);如果final修飾一個引用類型時,該引用不能再指向其他對象了,但該引用所的內(nèi)容是可以發(fā)生變化26 .對于final類型成員變量,一般來說有兩種賦初值方式:a)在聲明finalfinalfinal類型的成員變量時就賦上初值b)在聲明final類型的成員變量時不賦初值,但在所有構造方法中都為其類型的成員變量賦初值,27 .staticc代碼塊:靜態(tài)代碼塊作用是完成一些初始化工。在類被加載的時候先執(zhí)行靜態(tài)代碼塊,而構造方法是在生成對象的時候執(zhí)行;要想調(diào)用某個類來,首先需而

12、構造方法是在生成對象的時候執(zhí)行;30 .不能在靜態(tài)方法中訪問非成員變量,可以在非靜態(tài)方法中訪問靜態(tài)成員變量和非靜態(tài)成員變量,;31 .總結:靜態(tài)的只能訪問;非可以一切。32 .不能在靜態(tài)方法中使用this關鍵字。1 .接口中所聲明的方法都是抽象方法。接口中的方法都是public的。2 .接口中也可以定義成員變量。接口中的成員變量都是public、final、static的。3 .一個類不能既是final,又是abstract的。因為abstract的主要目的是定義一種約定,讓子類去實現(xiàn)這種約定,而final表示該類不能被繼承,這樣abstract希望該類可以被繼承而final明確說明該類不能被

13、繼承,兩者矛盾。因此一個類不能既是final的,又是abstract的。4 .DesignPattern(設計模式)。單例模式(Singleton):表示一個類只會生成唯一的一個對象。5 .包(package)。用于將完成不同功能的類分門別類,放在不同的目錄(包)下。包的命名規(guī)則:將公司域名反轉作為包名。,com.shengsiyuan(包名),對于包名:每個字母都需要小寫。如果定義類的時候沒有使用package,那么Java就認為我們所定義的類位于默認包里面(defaultpackage)。6 .編譯帶有package聲明的Java源文件有兩種方式:a)直接編譯,然后根據(jù)類中所定義的包名,逐

14、一手工建立目錄結構,最后將生成的class文件放到該目錄結構中(很少使用,比較麻煩)。b)使用編譯參數(shù)-d,方式為javac-d.源文件.java,這樣在編譯后,編譯器會自動幫助我們建立好包所對應的目錄結構。7 .有兩個包名,分別是aa.bb.cc與aa.bb.cc.dd,那么我們稱后者為前者的子包。8 .導入(import),將使用package分離的各個類導入回來,讓編譯器能夠找到所需要的類。9 .import的語法:importcom.shengsiyuan.PackageTest;10 .importcom.shengsiyuan.*,表示導入com.shengsiyuan包下面的所有

15、類。11 .importaa.bb.*并不會導入aa.bb.cc包下面的類。這時需要這樣寫:importaa.bb.*;importaa.bb.cc.*;12 .關于package、import、class的順序問題:a)首先需要定義包(package),可選b)接下來使用import進行導入,可選c)然后才是class或interface的定義。13 .如果兩個類在同一個包下面,那么則不需要導入,直接使用即可。14 .訪問修飾符(accessmodifier)。1) public(公共的):被public所修飾的屬性和方法可以被所有類訪問。2) protected(受保護的):被protec

16、ted所修飾的屬性和方法可以在類內(nèi)部、相同包以及該類的子類所訪問。3) private(私有的):被private所修飾的屬性和方法只能在該類內(nèi)部使用4)默認的(不加任何訪問修飾符):在類內(nèi)部以及相同包下面的類所使用。15. instanceof:判斷某個對象是否是某個類的實例。語法形式:引用名instanceof類名(接口名),返回一個boolean值。16. Peoplepeople=newMan();17. System.out.println(peopleinstanceofPeople);/結果為true,因為Man是People的子類,根據(jù)繼承,子類就是父類,因此Ma也可以看作是P

17、eople的實例。18. 相等性的比較(=)1)對于原生數(shù)據(jù)類型來說,比較的是左右兩邊的值是否相等。2)對于引用類型來說,比較左右兩邊的引用是否指向同一個對象,或者說左右兩邊的引用地址是否相同。19 .java.lang.Object類。java.lang包在使用的時候無需顯式導入,編譯時由編譯器自動幫助我們導入。20 .API(ApplicationProgrammingInterface),應用編程接口。21 .當打印引用時,實際上會打印出引用所指對象的toString()方法的返回值,因為每個類都直接或間接地繼承自Object,而Object類中定義了toString(),因此每個類都有

18、toString()這個方法。22 .關于進制的表示:16進制,逢16進一,16進制的數(shù)字包括:09,A,B,C,D,E,F,23.equals()方法,該方法定義在Object類當中,因此Java中的每個類都具有該方法,對于Object類的equals()方法來說,它是判斷調(diào)用equals()方法的引用與傳進來的引用是否一致,即這兩個引用是否指向的是同一個對象。對于Object類的equals()方法來說,它等價于=。24. 對于String類的equals()方法來說,它是判斷當前字符串與傳進來的字符串的內(nèi)容是否一致。25. 對于String對象的相等性判斷來說,請使用equals()方法

19、,而不要使用=。26. String是常量,其對象一旦創(chuàng)建完畢就無法改變。當使用訓接字符串時,會生成新的String對象,而不是向原有的String對象追加內(nèi)容。27. StringPool(字符串池)28. Strings="aaa”;(采用字面值方式賦值)1)查找StringPool中是否存在“aaa”這個對象,如果不存在,則在StringPool中創(chuàng)建一個“aaa”對象,然后將StringPool中的這個“aaa”對象的地址返回來,賦給引用變量s,這樣s會指向StringPool中的這個“aaa”字符串對象2)如果存在,則不創(chuàng)建任何對象,直接將StringPool中的這個“aa

20、a”對象地址返回來,賦給s引用。29. Strings=newString(“aaa”);1)首先在StringPool中查找有沒有“aaa”這個字符串對象,如果有,則不在StringPool中再去創(chuàng)建“aaa”這個對象了,直接在堆中(heap)中創(chuàng)建一個“aaa”字符串對象,然后將堆中的這個“aaa”對象的地址返回來,賦給s引用,導致s指向了堆中創(chuàng)建的這個“aaa”字符串對象。2)如果沒有,則首先在StringPool中創(chuàng)建一個“aaa”對象,然后再在堆中(heap)創(chuàng)建一個"aaa“對象,然后將堆中的這個"aaa“對象的地址返回來,賦給s引用,導致s指向了堆中所創(chuàng)建的這

21、個“aaa”對象。北京圣思園科技有限公司版權所有JavaSELesson41 .包裝類(包裝類(WrapperClass)。針對于原生數(shù)據(jù)類型的所有的包裝類(8個)者B位于java.langjava.langj包下。JavaJ中的8個包裝類分別是:個包裝類分別是:個包裝類分別是:個包裝類分別是:Byte,Short,Integer,Long,Float,Double,BooleanCharacter,。他們的使用方式都是一樣,可以實現(xiàn)原生數(shù)據(jù)類型與包裝類的雙向轉換。2 .數(shù)組(Array):相同類型數(shù)據(jù)的集合就叫做數(shù)組。3 .如何定義數(shù)組。type口變量名=newtype口數(shù)組中元素的個數(shù);可

22、以按照下列方式定義長度為10的數(shù)組:int口a=newint10;4 .數(shù)組中的元素索引是從0開始的。對于數(shù)組來說,最大索引=數(shù)組的長度-1。5 .定義數(shù)組的3種方式:type口變量名=newtype逗號分隔的初始化值列表;6 .Java中的每個數(shù)組都有長度,數(shù)組長度一旦確定,就不能改變大小。7 .int口a=newint10其中a是一個引用,它指向了生成的數(shù)組對象首地址是一個引用,每個元素都是int類型,其中僅存放數(shù)據(jù)值本身。北京圣思園科技有限公司版權所有8 .二維數(shù)組是一種平面的結構,二維數(shù)組的定義方式:type叩a=newtype23;9 .三維數(shù)組。type叩口a=newtype234

23、;10 .冒泡排序。(掌握交換,快速的原理與實現(xiàn)方式)11 .二分查找(BinarySearch):待查找的數(shù)組要有序。1 .對于Java中的常量的命名規(guī)則:所有單詞的字母都是大寫,如果有多個單詞,那么使用下劃線連接即可。比如說:publicstaticfinalintAGE_0F_PERSON=20;2 .在Java中聲明final常量時通常都會加上static關鍵字,這樣對象的每個實例都會訪問唯一一份常量值。3 .IDE(IntegratedDevelopmentEnvironment),集成開發(fā)環(huán)境。1) NetBeans。/,最高版本是6.9.12)

24、 JBuilder。3) IntellijIDEA4) Eclipse(日蝕、月蝕),最高版本3.6.15) 集合中存放的依然是對象的引用而不是對象本身。5 .ArrayList底層采用數(shù)組實現(xiàn),當使用不帶參數(shù)的構造方法生成ArrayList對象時,實際上會在底層生成一個長度為10的Object類型數(shù)組6 .如果增加的元素個數(shù)超過了10個,那么ArrayList底層會新生成一個數(shù)組,長度為原數(shù)組的1.5倍+1,然后將原數(shù)組的內(nèi)容復制到新數(shù)組當中,并且后續(xù)增加的內(nèi)容都會放到新數(shù)組當中。當新數(shù)組無法容納增加的元素時,重復該過程。7 .對于ArrayList元素的刪除操作,需要將被刪除元素的后續(xù)元素

25、向前移動,代價比較高。8 .集合當中只能放置對象的引用,無法放置原生數(shù)據(jù)類型,我們需要使用原生數(shù)據(jù)類型的包裝類才能加入到集合當中。9 .集合當中放置的都是Object類型,因此取出來的也是Object類型,那么必須要使用強制類型轉換將其轉換為真正的類型(放置進去的類型)。10 .關于ArrayList與LinkedList的比較分析a)ArrayList底層采用數(shù)組實現(xiàn),LinkedList底層采用雙向鏈表實現(xiàn)。b)當執(zhí)行插入或者刪除操作時,采用LinkedList比較好。c)當執(zhí)行搜索操作時,采用ArrayList比較好。11 .作業(yè):獨立分析LinkedList源代碼。12 .作業(yè):閱讀p

26、df文檔。13 .作業(yè):棧與隊列。1 .當向ArrayList添加一個對象時,實際上就是將該對象放置到了ArrayList底層所維護的數(shù)組當中;當向LinkedList中添加一個對象時,實際上LinkedList內(nèi)部會生成一個Entry對象,該Entry對象的結構為:Entry(Entryprevious;Objectelement;Entrynext;其中的Object類型的元素element就是我們向LinkedList中所添加的元素,然后Entry又構造好了向前與向后的引用previous、next,最后將生成的這個Entry對象加入到了鏈表當中。換句話說,LinkedList中所維護的

27、是一個個的Entry對象。2 .關于Object類的equals方法的特點a)自反性:x.equals(x)應該返回trueb)對稱性:x.equals(y)為true,那么y.equals(x)也為true。c)傳遞性:x.equals(y)為true并且y.equals(z)為true,刃B么x.equals(z)也應該為trueod)一致性:x.equals(y)的第一次調(diào)用為true,那么x.equals(y)的第二次、第三次、第n次調(diào)用也應該為true,前提條件是在比較之間沒有修改x也沒有修改yoe)對于非空引用x,x.equals(null)返回false。3 .關于Object類

28、的hashCode()方法的特點:a)在Java應用的一次執(zhí)行過程當中,對于同一個對象的hashCode方法的多次調(diào)用,他們應該返回同樣的值(前提是該對象的信息沒有發(fā)生變化)。b)對于兩個對象來說,如果使用equals方法比較返回true,那么這兩個對象的hashCode值一定是相同的。c)對于兩個對象來說,如果使用equals方法比較返回false,那么這兩個對象的hashCode值不要求一定不同(可以相同,可以不同),但是如果不同則可以提高應用的性能。d)對于Object類來說,不同的Object對象的hashCode值是不同的(Object類的hashCode值表示的是對象的地址)。4

29、.當使用HashSet時,hashCode()方法就會得到調(diào)用,判斷已經(jīng)存儲在集合中的對象的hashcode值是否與增加的對象的hashcode值一致;如果不一致,直接加進去;如果一致,再進行equals方法的比較,equals方法如果返回true,表示對象已經(jīng)加進去了,就不會再增加新的對象,否則加進去。5 .如果我們重寫equals方法,那么也要重寫hashCode方法,反之亦然。6 .Map(映射):Map的keySet()方法會返回key的集合,因為Map的鍵是不能重復的,因此keySet()方法的返回類型是Set;而Map的值是可以重復的,因此values()方法的返回類型是Colle

30、ction,可以容納重復的元素。7 .作業(yè):參見Lesson4的要求,使用集合實現(xiàn),不允許使用數(shù)組。8 .策略模式(StrategyPattern)。通過查詢資料掌握策略模式的原理。9 .閱讀TreeMap的幫助文檔,自己寫一個程序,練習TreeMap的使用方式并且自己定義一個Comparator北京圣思園科技有限公司JavaSELesson71.有這樣一個類:publicclassPerson(privatemtid;privateStringname;jlprivateintage;/getterandsetter要求:假如有若干個類Person對象存在一個List當中,對他們進行排序,分

31、別按照名字、年齡、id進行排序(要有正序與倒序兩種排序方式)。假如年齡或者姓名重復,按照id的正序進行排序。要求使用策略模式進行。2 .HashSet底層是使用HashMa似現(xiàn)的。當使用add方法將對象添加到Set當中時,實際上是將該對象作為底層所維護的Map對象的key,而value則都是同一個Object對象(該對象我們用不上);3 .HashMap底層維護一個數(shù)組,我們向HashMap中所放置的對象實際上是存儲在該數(shù)組當中;4 .當向HashMa葉put一對鍵值時,它會根據(jù)key的hashCode值計算出一個位置,該位置就是此對象準備往數(shù)組中存放的位置。5 .如果該位置沒有對象存在,就將

32、此對象直接放進數(shù)組當中;如果該位置已經(jīng)有對象存在了,則順著此存在的對象的鏈開始尋找(Entry類有一個Entry類型的next成員變量,指向了該對象的下一個對象),如果此鏈上有對象的話,再去使用equals方法進行比較,如果對此鏈上的某個對象的equals方法比較為false,則將該對象放到數(shù)組當中,然后將數(shù)組中該位置以前存在的那個對象鏈接到此對象的后面。6 .HashMap的內(nèi)存實現(xiàn)布局:7 .所謂泛型:就是變量類型的參數(shù)化。北京圣思園科技有限公司1 .當遍歷集合或數(shù)組時,如果需要訪問集合或數(shù)組的下標,那么最好使用舊式的方式來實現(xiàn)循環(huán)或遍歷,而不要使用增強的for循環(huán),因為它丟失了下標信息。

33、2 .Integer類有一個緩存,它會緩存介于-128127之間的整數(shù)。3 .可變參數(shù):可變參數(shù)本質上就是一個數(shù)組,對于某個聲明了可變參數(shù)的方法來說,我們既可以傳遞離散的值,也可以傳遞數(shù)組對象。但如果將方法中的參數(shù)定義為數(shù)組,那么只能傳遞數(shù)組對象而不能傳遞離散的值。4 .可變參數(shù)必須要作為方法參數(shù)的最后一個參數(shù),即一個方法不可能具有兩個或兩個以上的可變參數(shù)。5 .枚舉(Enun):我們所定義的每個枚舉類型都繼承自java.lang.Enum類,枚舉中的每個成員默認都是publicstaticfinal的。6 .而每個枚舉的成員其實就是您定義的枚舉類型的一(0實例(Instance)。換句話說,

34、當定義了一個枚舉類型后,在編譯時刻就能確定該枚舉類型有幾個實例,分別是什么。在運行期間我們無法再使用該枚舉類型創(chuàng)建新的實例了,這些實例在編譯期間就已經(jīng)完全確定下來了。7 .靜態(tài)導入:a) mon.Common.Age;b) mon.Common.output;8 .表示導入Common1中的靜態(tài)成員變量AGE以及靜態(tài)方法output。注意:使用importstatic時,要一直導入到類中的靜態(tài)成員變量或靜態(tài)方興。9 .Java中,無論生成某個類的多少個對象,這些對象都會對應于同一個Class對象。1.要想使用反射,首先需要獲得待處理類或對象所對應的Class對象。2,獲取某個類或某個對象所對應

35、的Class對象的常用的3種方式:a)使用Class類的靜態(tài)方法forName:Class.forName("java.lang.String");b)使用類的.class語法:String.class;c)使用對象的getClass()方法:Strings="aa”;Class<?>clazz=s.getClass();3,若想通過類的不帶參數(shù)的構造方法來生成對象,我們有兩種方式:a)先獲得Class對象,然后通過該Class對象的newInstance()方法直接生成即可:Class<?>classType=String.class;O

36、bjectobj=classType.newInstance();b)先獲得Class對象,然后通過該對象獲得對應的Constructor對象,再通過該Constructor對象的newInstance()方法生成:Class<?>classType=Customer.class;Constructorcons=classType.getConstructor(newClass);Objectobj=cons.newInstance(newObject。);4,若想通過類的帶參數(shù)的構造方法生成對象,只能使用下面這一種方式:Class<?>classType=Custom

37、er.class;Constructorcons=classType.getConstructor(newClassString.class,int.class);Objectobj=cons.newInstance(newObject“hello”,3);5.Integer.TYPE返回的是int,而Integer.class返回的是Integer類所對應的Class對象。北京圣思園科技有限公司JavaSELesson101,靜態(tài)代理模式圖示2. Java注解(Annotation):a) Override注解表示子類要重寫(override)父類的對應方法。b) Deprecated注解表

38、示方法是不建議被使用的。c) SuppressWarnings注解表示抑制警告。3,自定義注解:當注解中的屬性名為value時,在對其賦值時可以不指定屬性的名稱而直接寫上屬性值即可;除了value以外的其他值都需要使用name=value這種賦值方式,即明確指定給誰賦值。4 .當我們使用interface關鍵字定義一個注解時,該注解隱含地繼承了java.lang.annotation.Annotation接口;如果我們定義了一個接口,并且讓該接口繼承自Annotation,那么我們所定義的接口依然還是接口而不是注解;Annotation本身是接口而不是注解??梢耘cEnurnl比。5 .JUni

39、t(3.8、4.x):Keepthebargreentokeepthecodeclean.6 .我的名言:沒有反射,很多框架就不存在了。(NoReflection,Nomostframeworks)。7 .JUnit4的執(zhí)行的一般流程:a)首先獲得待測試類所對應的Class對象。b)然后通過該Class對象獲得當前類中所有public方法所對應的Method數(shù)組。c)遍歷該Method數(shù)組,取得每一個Method對象d)調(diào)用每個Method對象的isAnnotationPresent(Test.class)方法,判斷該方法是否被Test注解所修飾。e)如果該方法返回true,那么調(diào)用metho

40、d.invoke()方法去執(zhí)行該方法,否則不執(zhí)行。8,單元測試不是為了證明你是對的,而是證明你沒有錯誤。9. WritingSecureCode(編寫安全的代碼):Inputisevil。北京圣思園科技有限公司10. 異常(Exception)。11. Java中的異常分為兩大類:a) Checkedexception(非RuntimeException)b) Uncheckedexception(RuntimeException)12. Java中所有的異常類都會直接或間接地繼承自Exception。13. RuntimeException類也是直接繼承自Exception類,它叫做運行時異

41、常,Java中所有的運行時異常都會直接或間接地繼承自RuntimeException。14. Java中凡是繼承自Exception而不是繼承自RuntimeException的類都是非運行時異常。15.異常處理的一般結構是:try()catch(Exceptione)()finally()無論程序是否出現(xiàn)異常,finally塊中的代碼都是會被執(zhí)行的。16 .對于非運行時異常(checkedexception),必須要對其進行處理,處理方式有兩種:第一種是使用try.catch,finally進行捕獲;第二種是在調(diào)用該會產(chǎn)生異常的方法所在的方法聲明throwsException17 .對于運行

42、時異常(runtimeexception),我們可以不對其進行處理,也可以對其進行處理。推薦不對其進行處理。18 .NullPointerException是空指針異常,出現(xiàn)該異常的原因在于某個引用為null,但你北京圣思園科技有限公司卻調(diào)用了它的某個方法。這時就會出現(xiàn)該異常。1 .所謂自定義異常,通常就是定義了一個繼承自Exception類的子類,那么這個類就是一個自定義異常類。通常情況下,我們都會直接繼承自Exception類,一般不會繼承某個運行時的異常類。2 .我們可以使用多個catch塊來捕獲異常,這時需要將父類型的catch塊放到子類型的catch塊之后,這樣才能保證后續(xù)的catc

43、h可能被執(zhí)行,否則子類型的catch將永遠無法到達,Java編譯器會報編譯錯誤;如果多個catch塊的異常類型是獨立的(MyException,MyException2),那么誰前誰后都是可以的。3 .如果try塊中存在return語句,那么首先也需要將finally塊中的代碼執(zhí)行完畢,然后方法再返回。4 .如果try塊中存在System.ex計(0)語句,那么就不會執(zhí)行finally塊中的代碼,因為System.exit(0)會終止當前運行的Java虛擬機,程序會在虛擬機終止前結束執(zhí)行。5 .GUI(GraphicalUserInterface),圖形用戶界面。6 .AWT(Abstract

44、WindowToolkit),抽象窗口工具集,第一代的JavaGUI組件,是重量級的。7 .Swing,不依賴于底層細節(jié),輕量級的組件。JavaSELesson121.?-事件-描述發(fā)生了什么的對象?-事件源-事件的產(chǎn)生器?-事件處理器-接收事件、解釋事件并處理用戶交互的方法2.當單擊一個按鈕時就會產(chǎn)生一個事件(ActionEvent),然后檢查是否有與該按鈕關聯(lián)的事件處理器(實際上就是一個方法),如果沒有,那么什么都不執(zhí)行;如果有,就會將該事件傳遞給與該按鈕關聯(lián)的事件處理器方法,作為該方法的參數(shù),之后該事件處理器方法就會自動得到調(diào)用,并且該方法可以使用傳遞過來的ActionEvent對象,進

45、而獲得事件發(fā)生時與該事件及事件源相關聯(lián)的那些信息。3 .Java中的組件若想添加事件處理器,都會使用形如addXxxListener的方法來添加。4 .作業(yè):實現(xiàn)一個簡單的計算器。Inputisevil.5 .觀察者模式:6 .Swing。7 .作業(yè):1)閱讀Observable類的源代碼,理解Observable類與Observer接口之間的調(diào)用關系。2)編寫一個程序,聲明一個類,該類繼承自Observable(因此該類是個主題角色),有一個int類型的變量,初始值為10,編寫一個for循環(huán),將該數(shù)字每次遞減1,一直到0為止,每次變化時,都將該數(shù)字傳遞給它的觀察者,觀察者會打印出該數(shù)字;第二

46、個觀察者在該數(shù)字變?yōu)?之后開始打印該數(shù)字。JavaSELesson131 .內(nèi)部類(InnerClass),內(nèi)部類共分為4種。2 .靜態(tài)內(nèi)部類(staticinnerclass):只能訪問外部類的靜態(tài)成員變量與靜態(tài)方法,生成靜態(tài)內(nèi)部類對象的方式為:OuterClass.InnerClassinner=newOuterClass.InnerClass();3 .成員內(nèi)部類(memberinnerclass):可以訪問外部類的靜態(tài)與非靜態(tài)的方法與成員變量。生成成員內(nèi)部類對象的方式為:OuterClass.InnerClassinner=newOuterClass().newInnerClass()

47、;4 .若想在局部內(nèi)部類中訪問外部類的成員變量,語法為:OuterClass.this.a;5 .局部內(nèi)部類(LocalInnerClass):定義在方法當中,只能訪問方法中聲明的巾nal類型的變量。6 .匿名內(nèi)部類(AnonymousInnerClass):匿名內(nèi)部類會隱式地繼承一個父類或實現(xiàn)一個接口。7 .所謂遞歸(Recursion),就是方法調(diào)用自身。對于遞歸來說,一定有一個出口,讓遞歸結束,只有這樣才能保證不出現(xiàn)死循環(huán)。8 .作業(yè):給定任意一個目錄,以樹形方式展現(xiàn)出該目錄中的所有子目錄和文件。另外,在展現(xiàn)的時候將目錄排在上面,文件排在下面。每一層要加上縮進。JavaSELesson1

48、51 .一個類若想被序列化,則需要實現(xiàn)java.io.Serializable接口,該接口中沒有定義任何方法,是一個標識性接口(MarkerInterface),當一個類實現(xiàn)了該接口,就表示這個類的對象是可以序列化的。2 .在序列化時,static變量是無法序列化的;如果AM含了對B的引用,那么在序列化A的時候也會將整并地序列化;如果此時加以序列化,B無法序列化,那么當序列化A的時候就會發(fā)生異常,這時就需要將對B的引用設為transient,該關鍵字表示變量不會被序列化。privatevoidwriteObj&ct(java.ioObjectCutputStreamoy.tthrows

49、IOExcoptioncut.writelnt(sqe);out.writeUTF(naine);System.out.piintlnobject1,1>)pzivatevoidreaiobiect(javd.ic-ObjiectinoLtstrejmin)throwslOEjiceptonfClassNotFoundExceptionage=in.tea11nt.();nane=n.reaaUCFH;System.aut-frintlnf"radotje,rt;13 .當我們在一個待序列化/反序列化的類中實現(xiàn)了以上兩個private方法(方法聲明要與上面的保持完全的一致),那

50、么就允許我們以更加底層、更加細粒度的方式控制序列化/反序列化的過程。4 .Java中如果我們自己沒有產(chǎn)生線程,那么系統(tǒng)就會給我們產(chǎn)生一個線程(主線程,main方法就在主線程上運行),我們的程序都是由線程來執(zhí)行的。5 .進程:執(zhí)行中的程序(程序是靜態(tài)的概念,進程是動態(tài)的概念)。6 .線程的實現(xiàn)有兩種方式,第一種方式是繼承Thread類,然后重寫run方法;第二種是實現(xiàn)Runnable接口,然后實現(xiàn)其run方法。7 .將我們希望線程執(zhí)行的代碼放到run方法中,然后通過start方法來啟動線程,start方法首先為線程的執(zhí)行準備好系統(tǒng)資源,然后再去調(diào)用run方法。當某個類繼承了Thread類之后,該

51、類就叫做一個線程類。8 .一個進程至少要包含一個線程。9 .對于單核CP廉說,某一時刻只能有一個線程在執(zhí)行(微觀串行),從宏觀角度來看,多個線程在同時執(zhí)行(宏觀并行)。10 .對于雙核或雙核以上的CP廉說,可以真正做到微觀并行。11 .1)Thread類也實現(xiàn)了Runnable接口,因此實現(xiàn)了Runnable接口中的run方法;2)當生成一個線程對象時,如果沒有為其設定名字,那么線程對象的名字將使用如下形式:Thread-number,該number#是自動增力口的,并被所有的Thread對象所共享(因為它是static的成員變量)。3)當使用第一種方式來生成線程對象時,我們需要重寫run方法

52、,因為Thread類的run方法此時什么事情也不做。JavaSELesson161 .如果某個synchronized方法是static的,那么當線程訪問該方法時,它鎖的并不是synchronized方法所在的對象,而是synchronized方法所在的對象所對應的Class對象,因為Java中無論一個類有多少個對象,這些對象會對應唯一一個Class對象,因此當線程分別訪問同一個類的兩個對象的兩個static,synchronized方法時,他們的執(zhí)行順序也是順序的,也就是說一個線程先去執(zhí)行方法,執(zhí)行完畢后另一個線程才開始執(zhí)行。2 .synchronized塊,寫法:synchronized(

53、object)()表示線程在執(zhí)行的時候會對object對象上鎖。3 .synchronized方法是一種粗粒度的并發(fā)控制,某一時刻,只能有一個線程執(zhí)行該synchronized方法;synchronized塊則是一種細粒度的并發(fā)控制,只會將塊中的代碼同步,位于方法內(nèi)、synchronized塊之外的代碼是可以被多個線程同時訪問到的。4 .死鎖(deadlock)5 .wait與notify方法都是定義在Object類中,而且是巾nal的,因此會被所有的Java類所繼承并且無法重寫。這兩個方法要求在調(diào)用時線程應該已經(jīng)獲得了對象的鎖,因此對這兩個方法的調(diào)用需要放在synchronized方法或塊當

54、中。當線程執(zhí)行了wait方法時,它會釋放掉對象的鎖。6 .另一個會導致線程暫停的方法就是Thread類的sleep方法,它會導致線程睡眠指定的毫秒數(shù),但線程在睡眠的過程中是不會釋放掉對象的鎖的。JavaSELesson171 .對于單例模式(Singleton)來說,如果在getInstance()方法中生成Singleton實例則可能會產(chǎn)生同步問題,即可能會生成兩個不同的對象。JAVASELesson201 .客戶端與服務器端之間的通信全部采用XM陵現(xiàn):1)用戶登錄(type=1):<?xmlversion="1.0"encoding="utf-8&quo

55、t;?><message><type>1</type><user>zhangsan</user></message>type=4):2)服務器端向所有客戶端發(fā)送的在線用戶列表(<?xmlversion="1.0"encoding="utf-8"?><message><type>4</type><user>zhangsan</user><user>lisi</user><user

56、>wangwu</user></message>JAVASELesson211.客戶端與服務器端之間的通信全部采用XM陵現(xiàn):1)用戶登錄(type=1):<?xmlversion="1.0"encoding="utf-8"?><message><type>1</type><user>zhangsan</user></message>2)服務器端向所有客戶端發(fā)送的在線用戶列表(type=4):<?xmlversion="1.0&

57、quot;encoding="utf-8"?><message><type>4</type><user>zhangsan</user><user>lisi</user><user>wangwu</user></message>3)客戶端向服務器端發(fā)送的聊天數(shù)據(jù)(type=2):<message><type>2</type><user>zhangsan</user><content>

58、;chatmessage</content></message>4)服務器端向所有客戶端發(fā)送的聊天數(shù)據(jù)(type=3):<message><type>3</type><content>zhangsan:chatmessage</content></message>5)關閉服務器端窗口(type=6):<message><type>6</type></message>6)關閉客戶端窗口(type=5):<message><type>5</type><user>zhangsan</user><content>clientclosed</content></message>7 .服務器端確認客戶端關閉(type=7)<message>&

溫馨提示

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

評論

0/150

提交評論