JavaSE面向对象学习笔记总结
1,構(gòu)造函數(shù):
用于給對象進行初始化,是給與之對應(yīng)的對象進行初始化,它具有正對性,函數(shù)中的一種。
特點: 1. 該函數(shù)的名稱和所在的類的名稱相同 2. 不需要定義返回類型 3. 該函數(shù)沒有具體的返回值記住:所有對象創(chuàng)建時,都需要初始化才可以使用。注意事項:一個類在定義時,如果沒有定義過構(gòu)造函數(shù),那么該類中會自定生產(chǎn)一個空參數(shù)的構(gòu)造函數(shù),為了方便該類創(chuàng)建對象,完成初始化。如果該類中自己定義了構(gòu)造函數(shù),那么默認的構(gòu)造函數(shù)就沒有了。
this
代表對象,就是所在函數(shù)所屬對象的引用。
this到底代表什么呢?哪個對象調(diào)用了this所在的函數(shù),this就代表哪個對象,就是哪個對象的引用。開發(fā)時,什么時候使用this呢?在定義功能時,如果該功能內(nèi)部使用到了該工作的對象,這時就用this來表示這 個對象。this還static
關(guān)鍵字,是一個修飾符,用于修飾成員(成員變量和成員函數(shù))
特點: 1. 想要實現(xiàn)對象中的共性數(shù)據(jù)的對象共享。可以將這個數(shù)據(jù)進行靜態(tài)修飾。 2. 被靜態(tài)修飾的成員,可以直接被類名所調(diào)用。也就是說,靜態(tài)的成員多了一種調(diào)用方式:類名.靜態(tài)方式。 3. 靜態(tài)隨著類的加載而加載。而且優(yōu)先于對象存在。3,設(shè)計模式
單例設(shè)計模式
解決的問題:保證一個類在內(nèi)存中的對象的唯一性。比如:多程序讀取一個配置文件,建議配置文件封裝成對象。會方便操作其中數(shù)據(jù),又要保證多個程序讀到的是同一個配置文件對象,就需要改配置文件對象在內(nèi)存中是唯一的。
Runtime()方法就是單例設(shè)計模式進行設(shè)計的。
餓漢式
class Single{}懶漢式
4,繼承(面對對象特征之一)
final
抽象類:abstract
接口:interface
注意:接口中的成員都有固定的修飾符 成員變量:public static final 成員方法:public abstract eg: interface Inter{public static final int x = 3;public abstract voidshow(); }5,多態(tài)(面對對象特征之一)
函數(shù)本身就具備多態(tài)性,某一種事物有不同的具體表現(xiàn)。
體現(xiàn):父類引用或接口的引用指向了自己的子類的對象。//Animal a = newCat();
class Person{6,內(nèi)部類
如果A類需要直接訪問B類中的成員,而B類又需要建立A類的對象。這時,為了方便設(shè)計和訪問,直接將A類定義在B類中, 就可以了。A類就稱為內(nèi)部類。內(nèi)部類可以直接訪問外部類中的成員。而外部類想要訪問內(nèi)部類,必須要建立內(nèi)部類的對象。
當內(nèi)部類定義在外部類中的成員位置上,可以使用一些成員修飾符修飾private、static。 1. 默認修飾符。 2. 私有修飾符 3. 靜態(tài)修飾符如果內(nèi)部類被靜態(tài)修飾,相當于外部類,會出現(xiàn)訪問局部性,只能訪問外部類中的靜態(tài)成員。注意:如果內(nèi)部類中定義了靜態(tài)成員,那么該內(nèi)部類必須是靜態(tài)的。內(nèi)部類編譯后的文件名為:“外部類名$內(nèi)部類名.java”
為什么內(nèi)部類可以直接訪問外部類中的成員呢?
那是因為內(nèi)部類中都持有一個外部類的引用。這個引用是 外部類名.this 內(nèi)部類可以定義在外部類中的成員位置上,也可以定義在外部類中的局部位置上。 當內(nèi)部類被定義在局部位置上,只能訪問局部中被final修飾的局部變量。7,匿名內(nèi)部類
沒有名字的內(nèi)部類。就是內(nèi)部類的簡化形式。一般只用一次就可以用這種形式。匿名內(nèi)部類其實就是一個匿名子類對象。想要定義匿名內(nèi)部類:需要前提,內(nèi)部類必須繼承一個類或者實現(xiàn)接口。
匿名內(nèi)部類的格式:new 父類名$接口名(){ 定義子類成員或者覆蓋父類方法 }.方法
匿名內(nèi)部類的使用場景:
當函數(shù)的參數(shù)是接口類型引用時,如果接口中的方法不超過3個。可以通過匿名內(nèi)部類來完成參數(shù)的傳遞。 其實就是在創(chuàng)建匿名內(nèi)部類時,該類中的封裝的方法不要過多,最好兩個或者兩個以內(nèi)。8,異常
異常:就是不正常。程序在運行時出現(xiàn)的不正常情況。其實就是程序中出現(xiàn)的問題。
——java.lang.Throwable:
Throwable:可拋出的。
|–Error:錯誤。一般情況下,不編寫正對性的代碼進行處理,通常是jvm發(fā)生的,需要對程序進行修正。
|–Exception:異常,可以有正對性的處理方式。
9,多線程
進程:正在進行中的程序。其實進程就是一個應(yīng)用程序運行時的內(nèi)存分配空間。
線程:其實就是進程中的一個程序執(zhí)行單元,一條執(zhí)行路徑。進程負責的是應(yīng)用程序的空間的表示。線程負責的是應(yīng)用程序的執(zhí)行順序。
一個進程至少有一個線程在運行,但一個進程中出現(xiàn)多個線程時,就稱這個應(yīng)用程序是多線程應(yīng)用程序,每個線程在棧區(qū)中都有自己的執(zhí)行空間,自己的方法區(qū),自己的變量。
jvm在啟動時,首先有一個主線程,負責程序的執(zhí)行,調(diào)用的是main函數(shù)。主線程執(zhí)行的代碼都在main方法中。
當產(chǎn)生垃圾時,收垃圾的動作,是不需要主線程來完成,因為這樣,會出現(xiàn)主線程中的代碼執(zhí)行會停止,會去運行垃圾回收器代碼,效率較低,所以單獨一個線程來負責垃圾回收。
同步代碼塊
java中提供了一個解決方式:就是同步代碼塊。
格式:
synchronized(對象) { // 任意對象都可以。這個對象就是鎖。
需要被同步的代碼;
}同步函數(shù)
其實就是將同步關(guān)鍵字定義在函數(shù)上,讓函數(shù)具備了同步性。
同步函數(shù)是用的哪個鎖呢?
通過驗證,函數(shù)都有自己所屬的對象this,所以同步函數(shù)所使用的鎖就是this鎖。
當同步函數(shù)被static修飾時,這時的同步用的哪個鎖呢?
靜態(tài)函數(shù)在加載時所屬于類,這時有可能還沒有改類產(chǎn)生的對象,但是該類的字節(jié)碼文件加載進內(nèi)存就已經(jīng)被封裝成了對象,這個對象就是該類的字節(jié)碼文件對象。
所以靜態(tài)加載時,只有一個對象存在,那么靜態(tài)同步函數(shù)就使用的這個對象。這個對象就是類名.class
同步代碼塊和同步函數(shù)的區(qū)別?
同步代碼塊使用的鎖可以是任意對象。 同步函數(shù)使用的鎖是this,靜態(tài)同步函數(shù)的鎖是該類的字節(jié)碼文件對象。 在一個類中只有一個同步,可以使用同步函數(shù)。如果有多同步,必須使用同步代碼塊, 來確定不同的鎖,所以同步代碼塊相對靈活一些。Lock接口
多線程在JDK1.5版本升級時,推出一個接口Lock接口。
解決線程安全問題使用同步的形式,(同步代碼塊,要么同步函數(shù))其實最終使用的都是鎖機制。
所以 同步是隱式的鎖操作,二Lock對象是顯示的鎖操作,它的出現(xiàn)就替代了同步。
String字符串:
StringBuffer字符串緩沖區(qū)
StringBuilder字符串緩沖區(qū)
Integer對象
集合框架
用于存儲數(shù)據(jù)的容器。
特點:
1. 對象封裝數(shù)據(jù),對象多了也需要存儲。集合用于存儲對象。
2. 對象的個數(shù)確定可以使用數(shù)組,但是不確定怎么辦?可以用集合。因為集合是可變長度的。
集合與數(shù)組的區(qū)別:
Collection接口
Collection:
|——List:有序(元素存入集合的順序和取出的順序一致),元素都有索引。元素可以重復(fù)。
|——Set:無序(存入和取出順序有可能不一致),不可以存儲重復(fù)元素。必須保證元素的唯一性。
Inerator接口:
迭代器:是一個接口。作用:用于取集合中的元素。
List接口:
List本身是Collection接口的子接口,具備了Collection的所有方法。現(xiàn)在學習List體系特有的共性方法,查閱方法發(fā)現(xiàn)List的特有方法都有索引,這是該集合最大的特點。
List:有序(元素存入集合的順序和取出的順序一致),元素都有索引。元素可以重復(fù)。
|——ArrayList:底層的數(shù)據(jù)結(jié)構(gòu)是數(shù)組,線程不同步,ArrayList替代了Vector,查詢元素的速度非常快。
|——LinkedList:底層的數(shù)據(jù)結(jié)構(gòu)是鏈表,線程不同步,增刪元素的速度非常快。
|—— Vector:底層的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,線程同步的,Vector無論查詢和增刪都巨慢。
Set接口:
Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一種,迭代器。
|——HashSet:底層數(shù)據(jù)結(jié)構(gòu)是哈希表,線程時不同步的。無序,高效;HashSet集合保證元素唯一性:通過元素的hashCode方法,和equals方法完成的。當元素的hashCode值相同是,才繼續(xù)判斷元素的equals是否為true。
如果為true,那么視為相同元素,不存。如果為false,那么存儲。
如果hashCode值不同,那么不判斷equals,從而提高了對象比較的速度。
|——LinkedHashSet:有序,hashSet的子類。
|——TreeeSet:對Set集合中的元素的進行指定順序的排序。不同步。Tree底層的數(shù)據(jù)結(jié)構(gòu)就是二叉樹。
Map集合:
|——Hashtable:底層是哈希表數(shù)據(jù)結(jié)構(gòu),是線程同步的。不可以存儲null鍵,null值。
|——HashMap:底層是哈希表數(shù)據(jù)結(jié)構(gòu),是線程不同步的。可以存儲null值。替代了Hashtable。
|——TreeMap:底層是二叉樹結(jié)構(gòu),可以對map集合中的鍵進行指定順序的排序。
Collections:
它的出現(xiàn)給集合提供了更多的功能。這個類不需要創(chuàng)建對象,內(nèi)部提供的都是靜態(tài)方法。
Collections.sort(list);//list集合進行元素的自然順序排序
Collections.sort(list,new ComparatorByLen());//按指定的比較器方法排序
Arrays:
用于操作數(shù)組對象的工具類,里面都是靜態(tài)方法。
泛型:
jdk1.5 版本以后出現(xiàn)的一個安全機制。表現(xiàn)格式:< >
好處
1. 將運行時期的問題ClassCastException問題轉(zhuǎn)換成了編譯失敗,體現(xiàn)在編譯時期,程序員就可以解決問題。 2. 避免了強制轉(zhuǎn)換的麻煩。只要帶有了< >的類或者接口,都屬于帶有類型參數(shù)的類或者接口,在使用這些類或者接口時,必須給< >中傳遞一個具體的引用數(shù)據(jù)類型。
API—java.lang.System:
屬性和行為都是靜態(tài)的。
API—java.lang.Runtime;
類中沒有構(gòu)造方法,不能創(chuàng)建對象。
API—java.util.Math:
用于數(shù)學運算的工具類,屬性和行為都是靜態(tài)的。該類時final不允許繼承。
API—java.util.Data:
日期類:月份從0-11;
API—java.util.Calendar:
日歷類
IO流
用于處理設(shè)備上數(shù)據(jù)
- 字節(jié)流:InputStream OutputStream
- 字符流:Reader Writer
File類
將文件系統(tǒng)中的文件和文件夾封裝成了對象。提供了更多的屬性和行為可以對這些文件和文件夾進行操作。這些是流對象辦不到的,因為流只操作數(shù)據(jù)。
遞歸:
就是函數(shù)自身調(diào)用自身
RandomAccessFile:
管道流:
對象的序列化:
目的:將一個具體的對象進行持久化,寫入到硬盤上。
網(wǎng)絡(luò)編程:
- 端口
Socket:
UDP傳輸:
- 只要是網(wǎng)絡(luò)傳輸,必須有socket
TCP傳輸:
反射技術(shù):其實
正則表達式:
其實是用來操作字符串的一些規(guī)則
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的JavaSE面向对象学习笔记总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 方立勋_30天掌握JavaWeb_国际化
- 下一篇: 方立勋_30天掌握JavaWeb_在线支