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

下載本文檔

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

文檔簡介

JAVASELesson1

1.類是一種抽象的概念,對象是類的一種具體表達形式,是具體的概念。先

有類,然后由類來生成對象(Object)。對象又叫做實例(Instance)。

2.類由兩大部分構成:屬性以及方法。屬性一般用名詞來表達,方法一般用動

詞來表達。

3.假如一個java源文獻中定義了多個類,那么這些類中最多只能有一個類

是public的,換句話說,定義的多個類可以都不是pub1ic的。

4.在Java中進行方法的參數(shù)傳遞時,無論傳遞的是原生數(shù)據(jù)類型還是引用

類型,參數(shù)傳遞方式統(tǒng)一是傳值(passbyvalue)0Java中沒有傳引

用(passbyreference)的概念。

5.方法重載(Overload)o表達兩個或多個方法名字相同,但方法參數(shù)不

同。方法參數(shù)不同有兩層含義:1)參數(shù)個數(shù)不同。2)參數(shù)類型不同。注意:

方法的返回值對重載沒有任何影響。

6.構造方法重載:只需看參數(shù)即可。假如想在一個構造方法中調(diào)用此外一個構

造方法,那么可以使用this()的方式調(diào)用,this()括號中的參數(shù)表達目的構

造方法的參數(shù)。this。必須要作為構造方法的第一條語句,換句話說,thi

s()之前不能有任何可執(zhí)行的代碼。

7.繼承(Inheritence):Java是單繼承的,意味著一個類只能從

另一個類繼承(被繼承的類叫做父類【基類,baseclass],繼承的類叫做子

類),Java中的繼承使用extends關鍵字。

8.當生成子類對象時,Java默認一方面調(diào)用父類的不帶參數(shù)的構造方法,然后

執(zhí)行該構造方法,生成父類的對象。接下來,再去調(diào)用子類的構造方法,生成子

類的對象?!疽肷勺宇惖膶ο螅环矫嫘枰筛割惖膶ο?,沒有父類對象

就沒有子類對象。比如說:沒有父親,就沒有孩子】。

9.super關鍵字:super表達對父類對象的引用。

10.假如子類使用super()顯式調(diào)用父類的某個構造方法,那么在執(zhí)行的

時候就會尋找與super。所相應的構造方法而不會再去尋找父類的不帶參數(shù)的

構造方法。與this同樣,super也必須要作為構造方法的第一條執(zhí)行語句,前

面不能有其他可執(zhí)行語句。

11.關于繼承的3點:

a)父類有的,子類也有

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.當兩個方法形成重寫關系時,可以在子類方法中通過super.run()形式

調(diào)用父類的run()方法,其中super.run。不必放在第一行語句,因此此時父類

對象已經(jīng)構造完畢,先調(diào)用父類的run()方法還是先調(diào)用子類的run()方法是根

據(jù)程序的邏輯決定的。

16.在定義一個類的時候,假如沒有顯式指定該類的父類,那么該類就會繼承于

java.Iang.Object類(JDK提供的一個類,Object類是Java中所有類

的直接或間接父類)。

17.多態(tài)(Polymorphism):我們說子類就是父類(玫瑰是花,男人是人),

因此多態(tài)的意思就是:父類型的引用可以指向子類的對象。

JAVASELesson2

1.多態(tài):父類型的引用可以指向子對象。

2.Parentp=newChildO;當使用多態(tài)方式調(diào)法時,一方面檢查父

類中是否有ssing()方法,

3.一共有兩種類型的強制轉換:

a)向上類型轉換(向上類型轉換(upcastupcastupcastupcastupc

ast):比如說將):比如說將):比如說將CatCat類型轉換為An

ima1Animal類型,即將子類型,即將子轉換為父類型。

對于向上,不需要顯式指定b)向下類型轉換(向下類型轉換(downcastd

owncastdowncastdowncastdowncastdowncastdowncast):比如將):

比如將):對于向下,必須要顯式指定轉換為子類型。對

4.抽象類(抽象類(abstractc1ass):使用了abstract關鍵字

所修飾的類叫做抽象。抽象類無法實例化,也就是說不能newnew出來一

個抽象類的對(實例)。

5.抽象方法(abstractmeth):使用abstractt關鍵字所修飾的方法

叫做抽方法之前所定義的叫。相對于抽象方法,之前所定義的叫。相對于抽

象方法,之前所定義的叫做具體方法(有聲明,實現(xiàn))。

6.假如一個類包含了抽象方法,那么這定是抽象類。

7.假如某個類是抽象,那么該可以包含具體方法(有聲明、實現(xiàn))。假如某

個類是抽象,那么該可以包含具體方法(有聲明、實現(xiàn))。

8.假如一個類中包含了抽象方法,那么這定要聲明成abstractclass也

就是說,該類一定抽象;反之假如某個該類包含抽象方法,

9.無論何種情況,只要一個類是抽象那么這就法實例化。

10.在子類繼承父(是個抽象)的情況下,那么該子類必須要實現(xiàn)中所定義的

所有抽象方法;否則,該子類需要聲明成一個abstractclass。

11.接口(interface):接口的地位等同于接口的地位等同于class,

接口中的所有方法都是抽象方法。在聲明接口中的方法時,可以使用abstra

ct關鍵字,也可以不使用。通常情況下,都會省略掉abstract關鍵字。

12.可以將接口看作是特殊的抽象類(類中沒有具體方法,

13.類可以實現(xiàn)接口。實現(xiàn)使用關鍵字實現(xiàn)使用關鍵字implements

表達某個類實現(xiàn)某個接口。

14.一個類實現(xiàn)了某接口,那么該類必須要實現(xiàn)接口中聲明的所有方法。假如

15.Java是單繼承的,也就說某個類只能有唯一父;可以實現(xiàn)多個接口,

多之間使用逗號分隔。

16.多態(tài):所謂,就是父類型的引用可以指向子對象或者類例。關于接口與實

現(xiàn)的類之間強制類型之間的強完全同樣。

17.static關鍵字:可以用于修飾屬性,也方法還可以用于修飾屬性,也

方法還類(后面的課程講)

18.statictatictatictatic修飾屬性:無論一個類生成了多少對象,所

有這些共同使用唯一份靜態(tài)的成員變量;值也會隨之發(fā)生化。假如一個成員

變量是staticc的,

那么我們可以通過類名?成員變量名的方式來使用它

19.staticstaticstaticstaticstatic修飾方法:static修飾的

方法叫做靜態(tài)。對于靜態(tài)方法來說,可以使用類名?方法名的方式來訪問。

20.靜態(tài)方法只能繼承,不重寫((Override)。

21.final關鍵字:final可以修飾屬性、方法,類。

22.final修飾類::當一個類被final所修飾時,表達該類是一個終

態(tài)即不能被繼承。

23.final修飾方法:當一個方法被fina11所修飾時,表達該方法

是一個終態(tài)所修飾時,表達該方法是一個終態(tài)即不能被重寫(Override)0

24final修飾屬性:當一個屬性被當一個屬性被final所修飾時,表

達該屬性不能被改寫。

25.當final修飾一個原生數(shù)據(jù)類型時,表達該的值不能發(fā)變化(比如說不能

從10變?yōu)?0);假如final修飾一個引用類型時,該引用不能再指向

其他對象了,但該引用所的內(nèi)容是可以發(fā)生變化

26.對于final類型成員變量,一般來說有兩種賦初值方式:

a)在聲明finalfina1fina1類型的成員變量時就賦上初值

b)在聲明final類型的成員變量時不賦初值,但在所有構造方法中都

為其類型的成員變量賦初值,

27.staticc代碼塊:靜態(tài)代碼塊作用是完畢一些初始化工。在類被加載

的時候先執(zhí)行靜態(tài)代碼塊,而構造方法是在生成對象的時候執(zhí)行;要想調(diào)用某個

類來,一方面需而構造方法是在生成對象的時候執(zhí)行;

30.不能在靜態(tài)方法中訪問非成員變量,可以在非靜態(tài)方法中訪問靜態(tài)成員變

量和非靜態(tài)成員變量,;

31.總結:靜態(tài)的只能訪問;非可以一切。

32.不能在靜態(tài)方法中使用this關鍵字。

JavaSELesson3

1.接口中所聲明的方法都是抽象方法。接口中的方法都是public的。

2.接口中也可以定義成員變量。接口中的成員變量都是public、final、

static的。

3.一個類不能既是finaL又是abstract的。由于abstract的重要目的是定

義一種約定,讓子類去實現(xiàn)這種約定,而final表達該類不能被繼承,這樣abst

ract希望該類可以被繼承而final明確說明該類不能被繼承,兩者矛盾。因此一

個類不能既是final的,又是abstract的。

4.DesignPattern(設計模式)。單例模式(Sing1eton):表達一個

類只會生成唯一的一個對象。

5.包(package)。用于將完畢不同功能的類分門別類,放在不同的目錄

(包)下。包的命名規(guī)則:將公司域名反轉作為包名。.coni,com.shengsiyu

an(包名),對于包名:每個字母都需要小寫。假如定義類的時候沒有使用Pa

ckage,那么Java就認為我們所定義的類位于默認包里面(defau1tpackag

e)o

6.編譯帶有package聲明的Java源文獻有兩種方式:

a)直接編譯,然后根據(jù)類中所定義的包名,逐個手工建立目錄結構,最后將生

成的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包下面的

所有類。

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)publie(公共的):被public所修飾的屬性和方法可以被所有類訪問。

2)protected(受保護的):被protected所修飾的屬性和方法可以在

類內(nèi)部、相同包以及該類的子類所訪問。

3)private(私有的):被private所修飾的屬性和方法只能在該類內(nèi)部使用

4)默認的(不加任何訪問修飾符):在類內(nèi)部以及相同包下面的類所使用。

15.instanceof:判斷某個對象是否是某個類的實例。語法形式:引用名

instanceof類名(接口名),返回一^^boolean值。

16.Peoplepeople=newMan();

17.System.out.printin(peopleinstanceofPeop1e);//結

果為true,由于Man是People的子類,根據(jù)繼承,子類就是父類,因此Man也可以

看作是Peop1e的實例。

18.相等性的比較(==)

1)對于原生數(shù)據(jù)類型來說,比較的是左右兩邊的值是否相等。

2)對于引用類型來說,比較左右兩邊的引用是否指向同一個對象,或者說左右

兩邊的引用地址是否相同。

19.java.lang.Object類。java.1ang包在使用的時候無需顯式導入,編

譯時由編譯器自動幫助我們導入。

20.API(ApplicationProgrammingInterface),應用編程接

I-Io

21.當打印引用時,事實上會打印出引用所指對象的toString()方法的返回

值,由于每個類都直接或間接地繼承自Object,而Object類中定義了

toString(),因此每個類都有toString。這個方法。

22.關于進制的表達:16進制,逢16進一,16進制的數(shù)字涉及:0?9,A,B,C,D,

E,F,

23.equals。方法,該方法定義在Object類當中,因此Java中的每個類都

具有該方法,對于Object類的equa1s()方法來說,它是判斷調(diào)用equals。

方法的引用與傳進來的引用是否一致,即這兩個引用是否指向的是同一個對

象。對于Object類的equa1s()方法來說,它等價于==。

24.對于String類的equaIs()方法來說,它是判斷當前字符串與傳進來

的字符串的內(nèi)容是否一致。

25.對于String對象的相等性判斷來說,請使用equa1s()方法,而不要使

用==。

26.String是常量,其對象一旦創(chuàng)建完畢就無法改變。當使用+拼接字符串時,

會生成新的String對象,而不是向原有的String對象追加內(nèi)容。

27.StringPool(字符串池)

28.Strings="aaa”;(采用字面值方式賦值)

1)查找StringPool中是否存在“aaa”這個對象,假如不存在,則在Strin

gPool中創(chuàng)建一個"aaa”對象,然后將StringPoo1中的這個“a

aa”對象的地址返回來,賦給引用變量s,這樣s會指向StringPool中的這個

“aaa”字符串對象

2)假如存在,則不創(chuàng)建任何對象,直接將StringPool中的這個“aaa”

對象地址返回來,賦給S引用。

29.Strings=newString("aaa");

1)一方面在StringPool中查找有沒有“aaa”這個字符串對象,假如有,則不

在StringPoo1中再去創(chuàng)建"aaa"這個對象了,直接在堆中(heap)中創(chuàng)建一

個“aaa”字符串對象然后將堆中的這個“aaa”對象的地址返回來,賦給s引

用,導致s指向了堆中創(chuàng)建的這個“aaa”字符串對象。

2)假如沒有,則一方面在StringP。。1中創(chuàng)建一個“aaa”對象,然后再在

堆中(heap)創(chuàng)建一個“aaa“對象,然后將堆中的這個"aaa“對象的地址返回

來,賦給s引用,導致s指向了堆中所創(chuàng)建的這個“aaa“對象。

JavaSELesson4

1.包裝類(包裝類(WrapperClass)o針對于原生數(shù)據(jù)類型的所有

的包裝類(8個)都位于java.1angjava.1angj包下。

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ù);可以按照下列方式定義長度為10的數(shù)組:int[]a=newi

nt[10];

4.數(shù)組中的元素索引是從0開始的。對于數(shù)組來說,

最大索引===數(shù)組的長度-k

5.定義數(shù)組的3種方式:type口變量名={newtype[]}{逗號分隔的

初始化值列表);

6.Java中的每個數(shù)組都有長度,數(shù)組長度一旦擬定,就不能改變大小。

7.int[]a=newint[10]其中a是一個引用,它指向了生成的數(shù)組對象

首地址是一個引用,每個元素都是int類型,其中僅存放數(shù)據(jù)值自身。

8.二維數(shù)組是一種平面的結構,二維數(shù)組的定義方式:type[]口a=

newtype[2][3];

9.三維數(shù)組。type[]口口]a=newtype[2][3][4];

10.冒泡排序。(掌握互換,快速的原理與實現(xiàn)方式)

11.二分查找(BinarySearch):待查找的數(shù)組要有序。

JavaSELesson5

1.對于Java中的常量的命名規(guī)則:所有單詞的字母都是大寫,假如有多個單

詞,那么使用下劃線連接即可。比如說:

publicstaticfina1intAGE_OF_PERSON=20;

2.在Java中聲明fina1常量時通常都會加上static關鍵字,這樣對象

的每個實例都會訪問唯一一份常量值。

3.IDE(IntegratedDevelopmentEnvironment),集成開發(fā)環(huán)境。

2)JBuildero

3)IntellijIDEA

4.集合中存放的仍然是對象的引用而不是對象自身。

5.ArrayList底層采用數(shù)組實現(xiàn),當使用不帶參數(shù)的構造方法生成

ArrayList對象時,事實上會在底層生成一個長度為10的0bject類型數(shù)組

6.假如增長的元素個數(shù)超過了10個,那么ArrayList底層會新生成一個數(shù)組,

長度為原數(shù)組的L5倍+1,然后將原數(shù)組的內(nèi)容復制到新數(shù)組當中,并且后續(xù)增

長的內(nèi)容都會放到新數(shù)組當中。當新數(shù)組無法容納增長的元素時,反復該過

程。

7.對于ArrayList元素的刪除操作,需要將被刪除元素的后續(xù)元素向前移

動,代價比較高。

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è):閱讀pdf文檔。

13.作業(yè):棧與隊列。

JavaSELesson6

1.當向ArrayList添加一個對象時,事實上就是將該對象放置到了Ar

rayList底層所維護的數(shù)組當中;當向LinkedList中添加一個對象時,事

實上LinkedList內(nèi)部會生成一?個Entry對象,該Entry對象的結構為:

Entry

(

Entryprevious;

Objectelement;

Entrynext;

)

其中的Object類型的元素element就是我們向LinkedList中所添加

的元素,然后Entry又構造好了向前與向后的引用previous、next,最

后將生成的這個Entry對象加入到了鏈表當中。換句話說,LinkedList中所

維護的是一個個的Entry對象。

2.關于Object類的equa1s方法的特點

a)自反性:x.equals(x)應當返回true

b)對稱性:x.equaIs(y)為true,那么y.equaIs(x)也為true。

c)傳遞性:x.equaIs(y)為true并且y.equa1s(z)為true,那么x.equa

1s(z)也應當為trueo

d)一致性:x.equals(y)的第一次調(diào)用為true,那么x.equals(y)的第

二次、第三次、第n次調(diào)用也應當為true,前提條件是在比較之間沒有修改x

也沒有修改yo

e)對于非空引用x,x.equals(nul1)返回fa1se。

3.關于Object類的hashCode()方法的特點:

a)在Java應用的一次執(zhí)行過程當中,對于同一個對象的hashCode方法的

多次調(diào)用,他們應當返回同樣的值(前提是該對象的信息沒有發(fā)生變化)。

b)對于兩個對象來說,假如使用equals方法比較返回true,那么這兩個對

象的hashCode值一定是相同的。

c)對于兩個對象來說,假如使用equals方法比較返回false,那么這兩個對

象的hashCode值不規(guī)定一定不同(可以相同,可以不同),但是假如不同則

可以提高應用的性能。

d)對于Object類來說,不同的Object對象的hashCode值是不同的(Obj

ect類的hashCode值表達的是對象的地址)。

4.當使用HashSet時,hashC。de()方法就會得到調(diào)用,判斷已經(jīng)存儲在集

合中的對象的hashcode值是否與增長的對象的hashcode值一致;假如

不一致,直接加進去;假如一致,再進行equa1s方法的比較,equa1s方法

假如返回true,表達對象已經(jīng)加進去了,就不會再增長新的對象,否則加進去。

5.假如我們重寫equals方法,那么也要重寫hashC。de方法,反之亦然。

6.Map(映射):Map的keySet()方法會返回key的集合,由于Map的鍵是

不能反復的,因此keySet()方法的返回類型是Set;而Map的值是可以反復

的,因此values。方法的返回類型是Collection,可以容納反復的元素。

7.作業(yè):參見Lesson4的規(guī)定,使用集合實現(xiàn),不允許使用數(shù)組。

8.策略模式(StrategyPattern)o通過查詢資料掌握策略模式的原理。

9.閱讀TreeMap的幫助文檔,自己寫一個程序,練習TreeMap的使用方式

并且自己定義一個Comparator。

北京圣思園科技有限公司

JavaSELesson7

1.有這樣一個類:

publicclassPerson

privateintid;

privateStringname;

privateintage;

//getterandsetter

規(guī)定:假如有若干個類Person對象存在一個List當中,對他們進行排序,分別

按照名字、年齡、id進行排序(要有正序與倒序兩種排序方式)。假如年齡或

者姓名反復,按照id的正序進行排序。規(guī)定使用策略模式進行。

2.HashSet底層是使用HashMap實現(xiàn)的。當使用add方法將對象添加到

Set當中時,事實上是將該對象作為底層所維護的Map對象的key,而val

ue則都是同一個Object對象(該對象我們用不上);

3.HashMap底層維護一個數(shù)組,我們向HashMap中所放置的對象事實上是存儲

在該數(shù)組當中;

4.當向HashMap中put一對鍵值時,它會根據(jù)key的hashCode值計算出一

個位置,該位置就是此對象準備往數(shù)組中存放的位置。

5.假如該位置沒有對象存在,就將此對象直接放進數(shù)組當中;假如該位置已有

對象存在了,則順著此存在的對象的鏈開始尋找(Entry類有一個Entry類型

的next成員變量,指向了該對象的下一個對象),假如此鏈上有對象的話,再

去使用equals方法進行比較,假如對此鏈上的某個對象的equals方法比較

為false,則將該對象放到數(shù)組當中,然后將數(shù)組中該位置以前存在的那個對象

鏈接到此對象的后面。

6.HashMap的內(nèi)存實現(xiàn)布局:

7.所謂泛型:就是變量類型的參數(shù)化。。

北京圣思園科技有限公司

JavaSELesson8

1.當遍歷集合或數(shù)組時,假如需要訪問集合或數(shù)組的下標,那么最佳使用舊式的

方式來實現(xiàn)循環(huán)或遍歷,而不要使用增強的for循環(huán),由于它丟失了下標信

息。

2.Integer類有一個緩存,它會緩存介于-128~127之間的整數(shù)。

3.可變參數(shù):可變參數(shù)本質(zhì)上就是一個數(shù)組,對于某個聲明了可變參數(shù)的方法

來說,我們既可以傳遞離散的值,也可以傳遞數(shù)組對象。但假如將方法中的參數(shù)

定義為數(shù)組,那么只能傳遞數(shù)組對象而不能傳遞離散的值。

4.可變參數(shù)必須要作為方法參數(shù)的最后一個參數(shù),即一個方法不也許具有兩個

或兩個以上的可變參數(shù)。

5.枚舉(Enum):我們所定義的每個枚舉類型都繼承自java.1ang.Enum

類,枚舉中的每個成員默認都是publiestaticfina1的。

6.而每個枚舉的成員其實就是您定義的枚舉類型的一值1實例(Instance)o

換句話說,當定義了一個枚舉類型后,在編譯時刻就能擬定該枚舉類型有幾個實

例,分別是什么。在運營期間我們無法再使用該枚舉類型創(chuàng)建新的實例了,這

些實例在編譯期間就已經(jīng)完全擬定下來了。

7.靜態(tài)導入:

a)importstaticcom.shengsiyuan.common.Common.Age;

b)importstaticcom.shengsiyuan.common.Common,output;

8.表達導入Common類中的靜態(tài)成員變量AGE以及靜態(tài)方法output。注意:

使用importstatic時,要一直導入到類中的靜態(tài)成員變量或靜態(tài)方法。

9.Java中,無論生成某個類的多少個對象,這些對象都會相應于同一個Clas

s對象。

JavaSELesson9

1.要想使用反射,一方面需要獲得待解決類或對象所相應的Class對象。

2.獲取某個類或某個對象所相應的Class對象的常用的3種方式:

a)使用Class類的靜態(tài)方法forName:Class.forName(ajava.lang.

String");

b)使用類的.c1ass語法:String.c1ass;

c)使用對象的getC1ass()方法:Strings="aa”;Class<?>claz

z=s.getC1ass();

3.若想通過類的不帶參數(shù)的構造方法來生成對象,我們有兩種方式:

a)先獲得Class對象,然后通過該Class對象的newlnstance()方法直接生

成即可:

Class<?>classType=String.class;

Objectobj=classType.newlnstance();

b)先獲得C1ass對象,然后通過該對象獲得相應的Constructor對象,再

通過該Constructor對象的newlnstance()方法生成:

Class<?>c1assType=Customer.class;

Constructorcons=c1assType.getConstructor(newC1

ass[]{});

0bjectobj=cons,newInstance(newObject[]{});

4.若想通過類的帶參數(shù)的構造方法生成對象,只能使用下面這一種方式:

Class<?>classType=Customer.class;

Constructorcons=classType.getConstructor(newCla

ss[]{String.class,int.c1ass));

Objectobj=cons,newInstanee(newObject[]{"he1lov,3});

5.Integer.TYPE返回的是int,而Integer.class返回的是Integer類所

相應的C1ass對象。

北京圣思園科技有限公司

JavaSELesson10

2.Java注解(Annotation):

a)Override注解表達子類要重寫(override)父類的相應方法。

b)Deprecated注解表達方法是不建議被使用的。

c)SuppressWarnings注解表達克制警告。

3.自定義注解:當注解中的屬性名為value時,在對其賦值時可以不指定屬性

的名稱而直接寫上屬性值即可;除了value以外的其他值都需要使用na

me=value這種賦值方式,即明確指定給誰賦值。

4.當我們使用@interface關鍵字定義一個注解時,該注解隱含地繼承了

java.lang,annotation.Annotation接口;假如我們定義了一個接口,并

且讓該接口繼承自Annotation,那么我們所定義的接口仍然還是接口而不

是注解;Annotation自身是接口而不是注解??梢耘cEnum類比。

5.JUnit(3.8、4.x):Keepthebargreentokeepthecode

c1ean.

6.我的名言:沒有反射,很多框架就不存在了。(NoReflection,Nomost

frameworks)。

7.川nit4的執(zhí)行的一般流程:

a)一方面獲得待測試類所相應的C1ass對象。

b)然后通過該Class對象獲得當前類中所有public方法所相應的Metho

d數(shù)組。

c)遍歷該Method數(shù)組,取得每一個Method對象

d)調(diào)用每個Method對象的isAnnotationPresent(Test.class)方法,

判斷該方法是否被Test注解所修飾。

e)假如該方法返回true,那么調(diào)用method.invoke()方法去執(zhí)行該方

法,否則不執(zhí)行。

8.單元測試不是為了證明你是對的,而是證明你沒有錯誤。

9.WritingSecureCode(編寫安全的代碼):Inputisevil。

北京圣思園科技有限公司

10.異常(Exception)。

11.Java中的異常分為兩大類:

a)Checkedexception(非RuntimeException)

b)Uncheckedexception(RuntimeException)

12.Java中所有的異常類都會直接或間接地繼承自Exception。

13.RuntimeException類也是直接繼承自Exception類,它叫做運營

時異常,Java中所有的運營時異常都會直接或間接地繼承自RuntimeEx

ceptiono

14.Java中凡是繼承自Exception而不是繼承自RuntimeException的類

都是非運營時異常。

15.異常解決的一般結構是:

try

cateh(Exceptione)

finally

無論程序是否出現(xiàn)異常,finally塊中的代碼都是會被執(zhí)行的。

16.對于非運營時異常(checkedexception),必須要對其進行解決,解決

方式有兩種:第一種是使用try..catch-finally進行捕獲;第二種是

在調(diào)用該會產(chǎn)生異常的方法所在的方法聲明throwsException

17.對于運營時異常(runtimeexception),我們可以不對其進行解

決,也可以對其進行解決。推薦不對其進行解決。

18.NullPointerException是空指針異常,出現(xiàn)該異常的因素在于某個引用

為nu11,但你

北京圣思園科技有限公司

卻調(diào)用了它的某個方法。這時就會出現(xiàn)該異常。

JavaSELesson11

1.所謂自定義異常,通常就是定義了一個繼承自Exception類的子類,

那么這個類就是一個自定義異常類。通常情況下,我們都會直接繼承自Exce

Ption類,一般不會繼承某個運營時的異常類。

2.我們可以使用多個catch塊來捕獲異常,這時需要將父類型的catch塊放到

子類型的catch塊之后,這樣才干保證后續(xù)的catch也許被執(zhí)行,否則子類型

的catch將永遠無法到達,Java編譯器會報編譯錯誤;假如多個catch塊的異

常類型是獨立的(MyException,MyException2),那么誰前誰后都是可

以的。

3.假如try塊中存在return語句,那么一方面也需要將finally塊中的代

碼執(zhí)行完畢,然后方法再返回。

4.假如try塊中存在System.exit(0)語句,那么就不會執(zhí)行fina11y

塊中的代碼,由于System,exit(0)會終止當前運營的Java虛擬機,程序會

在虛擬機終止前結束執(zhí)行。

5.GUI(GraphicalUserInterface),圖形用戶界面。

6.AWT(AbstractWindowToolkit),抽象窗口工具集,第一代的Jav

aGUI組件,是重量級的。

7.Swing,不依賴于底層細節(jié),輕量級的組件。

JavaSELesson12

1.

?一事件一描述發(fā)生了什么的對象

?-事件源一事件的產(chǎn)生器

?-事件解決器一接受事件、解釋事件并解決用戶交互的方法

2.當單擊一個按鈕時就會產(chǎn)生一個事件(ActionEvent),然后檢查是否有

與該按鈕關聯(lián)的事件解決器(事實上就是一個方法),假如沒有,那么什么都不執(zhí)

行;假如有,就會將該事件傳遞給與該按鈕關聯(lián)的事件解決器方法,作為該方法

的參數(shù),之后該事件解決器方法就會自動得到調(diào)用,并且該方法可以使用傳遞過

來的ActionEvent對象,進而獲得事件發(fā)生時與該事件及事件源相關聯(lián)的那

些信息。

3.Java中的組件若想添加事件解決器,都會使用形如addXxxListener的

方法來添加。

4.作業(yè):實現(xiàn)一個簡樸的計算器。Inputisevil.

5.觀測者模式:

6.Swing0

7.作業(yè):

1)閱讀Observable類的源代碼,理解Observable類與Observer接口之間的調(diào)

用關系。

2)編寫一個程序,聲明一個類,該類繼承自Observab1e(因此該類是個主題角

色),有一個int類型的變量,初始值為10,編寫一個for循環(huán),將該數(shù)字每次遞減1,

一直到0為止,每次變化時,都將該數(shù)字傳遞給它的觀測者,觀測者會打印出該

數(shù)字;第二個觀測者在該數(shù)字變?yōu)?之后開始打印該數(shù)字。

JavaSELesson13

1.內(nèi)部類(InnerClass),內(nèi)部類共分為4種。

2.靜態(tài)內(nèi)部類(staticinnerclass):只能訪問外部類的靜態(tài)成員變

量與靜態(tài)方法,生成靜態(tài)內(nèi)部類對象的方式為:

OuterClass.InnerClassinner=newOuterClass.InnerCl

ass();

3.成員內(nèi)部類(memberinnerc1ass):可以訪問外部類的靜態(tài)與非靜態(tài)

的方法與成員變量。生成成員內(nèi)部類對象的方式為:

OuterClass.InnerC1assinner=newOuterClass().newInne

rClass();

4.若想在局部內(nèi)部類中訪問外部類的成員變量,語法為:Oute

rClass.this,a;

5.局部內(nèi)部類(LocalInnerClass):定義在方法當中,只能訪問方法中

聲明的final類型的變量。

6.匿名內(nèi)部類(AnonymousInnerClass):匿名內(nèi)部類會隱式地繼承一

個父類或實現(xiàn)一個接口。

7.所謂遞歸(Recursion),就是方法調(diào)用自身。對于遞歸來說,一定有一個

出口,讓遞歸結束,只有這樣才干保證不出現(xiàn)死循環(huán)。

8.作業(yè):給定任意一個目錄,以樹形方式展現(xiàn)出該目錄中的所有子目錄和文

獻。止匕外,在展現(xiàn)的時候將目錄排在上面,文獻排在下面。每一層要加上縮進。

JavaSELesson15

1.一個類若想被序列化,則需要實現(xiàn)java.io.Serializable接口,該接

口中沒有定義任何方法,是一個標記性接口(MarkerInterface),當一個類實

現(xiàn)了該接口,就表達這個類的對象是可以序列化的。

2.在序列化時,static變量是無法序列化的;假如A包含了對B的引用,那么

在序列化A的時候也會將B一并地序列化;假如此時A可以序列化,B無法序列

化,那么當序列化A的時候就會發(fā)生異常,這時就需要將對B的引用設為tr

ansient,該關鍵字表達變量不會被序列化。

privatevoidwriteObject(java.io.ObjectoutputStreamout)throwslOException

out.writelnt(age);

out.writeUTF(name);

System.out.printin(Mwriteobject");

}

privatevoidreadObject(java.io.ObjectInputstreamin)throwslOException,

ClassNotFoundException

(

age=in.readlnt();

name=in.readUTF();

System.out.printin(nreadobject");

)

3.當我們在一個待序列化/反序列化的類中實現(xiàn)了以上兩個private方法

(方法聲明要與上面的保持完全的一致),那么就允許我們以更加底層、更加細

粒度的方式控制序列化/反序列化的過程。

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類之后,該類就叫做一個線程類。

8.一個進程至少要包含一個線程。

9.對于單核CPU來說,某一時刻只能有一個線程在執(zhí)行(微觀串行),從宏觀角

度來看,多個線程在同時執(zhí)行(宏觀并行)。

10.對于雙核或雙核以上的CPU來說,可以真正做到微觀并行。

11.

1)Thread類也實現(xiàn)了Runnable接口,因此實現(xiàn)了Runnable接口中的run

方法;

2)當生成一個線程對象時,假如沒有為其設定名字,那么線程對象的名字將使

用如下形式:Thread-number,該number將是自動增長的,并被所有的Thread

對象所共享(由于它是static的成員變量)。

3)當使用第一種方式來生成線程對象時,我們需要重寫run方法,由于Thr

ead類的run方法此時什么事情也不做。

JavaSELesson16

1.假如某個synchr。nized方法是static的,那么當線程訪問該方法時,

它鎖的并不是synchronized方法所在的對象,而是synchronized方法所在

的對象所相應的C1ass對象,由于Java中無論一個類有多少個對象,這些對象

會相應唯一一個Class對象,因此當線程分別訪問同一個類的兩個對象的兩個s

tatic,synchronized方法時,他們的執(zhí)行順序也是順序的,也就是說一

個線程先去執(zhí)行方法,執(zhí)行完畢后另一個線程才開始執(zhí)行。

2.synchronized塊,寫法:

synchronized(object)

(

}

表達線程在執(zhí)行的時候會對object對象上鎖。

3.synchronized方法是一種粗粒度的并發(fā)控制,某一時刻,只能有一個線程

執(zhí)行該synchronized方法;synchronized塊則是一種細粒度的并發(fā)控制,只

會將塊中的代碼同步,位于方法內(nèi)、synchronized塊之外的代碼是可以被多個

線程同時訪問到的。

4,死鎖(deadlock)

5.wait與notify方法都是定義在Object類中,并且是final的,因此

會被所有的Java類所繼承并且無法重寫。這兩個方法規(guī)定在調(diào)用時線程應當已

經(jīng)獲得了對象的鎖,因此對這兩個方法的調(diào)用需要放在synchronized方法或

塊當中。當線程執(zhí)行了wait方法時,它會釋放掉對象的鎖。

6.另一個會導致線程暫停的方法就是Thread類的sleep方法,它會導致線程

睡眠指定的毫秒數(shù),但線程在睡眠的過程中是不會釋放掉對象的鎖的。

JavaSELesson17

1.對于單例模式(Sing1eton)來說,假如在getInstance()方法中生成Si

ngleton實例則也許會產(chǎn)生同步問題,即也許會生成兩個不同的對象。

JAVASELesson20

1.客戶端與服務器端之間的通信所有采用XML實現(xiàn):

1)用戶登錄(type=1):

<?xm1version="/1.0"encoding="utf-8”?>

<message>

<type>K/type>

<user>zhangsan</user>

</message>

2)服務器端向所有客戶端發(fā)送的在線用戶列表(type=4):

<?xmlversion=,zl.0〃encoding=〃utf—8"?〉

<message>

<type>4</type>

<user>zhangsan</user>

<user>1isi</user>

<user>wangwu</user>

</message>

JAVASELesson21

1.客戶端與服務器端之間的通信所有采用XML實現(xiàn):

1)用戶登錄(type=l):

<?xmlversion=,,l.0"encoding="utf-8”?>

<message>

<type>l</type>

<user>zhangsan</user>

</message>

2)服務器端向所有客戶端發(fā)送的在線用戶列表(type=4):

<?xm1version=/,l.0〃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>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>

<type>7</type>

</message>

8.登錄結果(type=8)

<message>

<type>8</type>

<result>success</result>

</message>

系統(tǒng)概覽圖:

4)當使用第二種方式來生成線程對象時,我們需要實現(xiàn)Runnable接口的run

方法,然后使用newThread(newMyThread())(假如MyThread已經(jīng)實現(xiàn)

了Runnab1e接口)來生成線程對象,這時的線程對象的run方法就會調(diào)用My

Thread類的run方法,這樣我們自己編寫的run方法就執(zhí)行了。

12.關于成員變量與局部變量:假如一個變量是成員變量,那么多個線程對同一

個對象的成員變量進行操作時,他們對該成員變量是彼此影響的(也就是說一個

線程對成員變量的改變會影響到另一個線程)。

13.假如一個變量是局部變量,那么每個線程都會有一個該局部變量的拷貝,一

個線程對該局部變量的改變不會影響到其他的線程。

14.停止線程的方式:不能使用Thread類的stop方法來終止線程的執(zhí)行。一

般要設定一個變量,在run方法中是一個循環(huán),循環(huán)每次檢查該變量,假如滿足

條件則繼續(xù)執(zhí)行,否則跳出循環(huán),線程結束。

15.不能依靠線程的優(yōu)先級來決定線程的執(zhí)行順序。

16.synchronized關鍵字:當synchronized關鍵字修飾一個方法的時候,

該方法叫做同步方法。

17.Java中的每個對象都有一個鎖(lock)或者叫做監(jiān)視器(monitor),當

訪問某個對象的synchronized方法時,表達將該對象上鎖,此時其他任何線

程都無法再去訪問該synchronized方法了,直到之前的那個線程執(zhí)行方法完

畢后(或者是拋出了異常),那么將該對象的鎖釋放掉,其他線程才有也許再去

訪問該synchronized方法。

18.假如一個對象有多個synchronized方法,某一時刻某個線程已經(jīng)進入到

了某個synchronized方法,那么在該方法沒有執(zhí)行完畢前,其他線程是無法

訪問該對象的任何synchronized方法的。

JavaSELesson22

1.ClassLoader(類加載器)

2.JVM提供了三種類加載器

1)根類加載器(使用C++編寫,程序員無法在Jav

溫馨提示

  • 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

提交評論