最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

java基礎知識點

2023-04-04 19:02 作者:Python阿罡  | 我要投稿

一、語言的五大特性

1、萬物皆對象


2、程序就是多個對象彼此調(diào)用方法的過程


3、從內(nèi)存角度而言,每個對象都是由其它更基礎的對象組成的


4、每一個對象都有類型,都可以進行實例化


5、同一類型的對象可以接收相同的消息


面向?qū)ο缶幊痰淖畲筇魬?zhàn)就是如何在問題空間的元素和解決方案空間的對象之間建立一對一的關聯(lián)。


二、類

類的創(chuàng)建者負責在創(chuàng)建新的類時,只暴露必要的接口給客戶程序員,同時隱藏其它所有不必要的信息。


為什么這么做呢?


1、因為如果這些信息對于客戶程序員而言是不可見的,那么類的創(chuàng)建者就可以任意修改隱藏信息,而無需擔心對其它任何人造成影響。隱藏的代碼通常代表著一個對象內(nèi)部脆弱的部分,如果輕易暴露給粗心或經(jīng)驗不足的客戶程序員,就可能在頃刻之間被破壞殆盡。所以,隱藏代碼的具體實現(xiàn)可以有效減少程序bug。


2、讓類庫的設計者在改變類的內(nèi)部工作機制時,不用擔心影響到使用該類的客戶程序員。


Java提供了三個顯示關鍵字來控制訪問權(quán)限

三、對象間的四種關系

1、依賴

依賴關系表示一個類依賴于另一個類的定義。例如,一個人(Person)可以買車(car)和房子(House),Person類依賴于Car類和House類的定義,因為Person類引用了Car和House。與關聯(lián)不同的是,Person類里并沒有Car和House類型的屬性,Car和House的實例是以參量的方式傳入到buy()方法中去的。一般而言,依賴關系在Java語言中體現(xiàn)為局域變量、方法的形參,或者對靜態(tài)方法的調(diào)用。?


2、關聯(lián)

關聯(lián)(Association)關系是類與類之間的聯(lián)接,它使一個類知道另一個類的屬性和方法。關聯(lián)可以是雙向的,也可以是單向的。在Java語言中,關聯(lián)關系一般使用成員變量來實現(xiàn)。?


3、聚合

聚合(Aggregation) 關系是關聯(lián)關系的一種,是強的關聯(lián)關系。聚合是整體和個體之間的關系。例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關系便整體和個體的關系。與關聯(lián)關系一樣,聚合關系也是通過實例變量實現(xiàn)的。但是關聯(lián)關系所涉及的兩個類是處在同一層次上的,而在聚合關系中,兩個類是處在不平等層次上的,一個代表整體,另一個代表部分。?


4、組合

組合(Composition) 關系是關聯(lián)關系的一種,是比聚合關系強的關系。它要求普通的聚合關系中代表整體的對象負責代表部分對象的生命周期,組合關系是不能共享的。代表整體的對象需要負責保持部分對象和存活,在一些情況下將負責代表部分的對象湮滅掉。代表整體的對象可以將代表部分的對象傳遞給另一個對象,由后者負責此對象的生命周期。換言之,代表部分的對象在每一個時刻只能與一個對象發(fā)生組合關系,由后者排他地負責生命周期。部分和整體的生命周期一樣。?


三、封裝、繼承、多態(tài)

1、封裝

封裝就是把對象的屬性和行為結(jié)合為一個獨立的整體,并盡可能多的隱藏對象的內(nèi)部實現(xiàn)細節(jié)。


2、繼承

對象用來封裝數(shù)據(jù)和功能,但我們要創(chuàng)建一個新類,然而它又與已存在的類具有部分相同的屬性或功能,此時,為了代碼復用原則,可以使用繼承來實現(xiàn)。


繼承通過基類和子類的概念來表達,基類的所有特征和行為都可以與子類共享。也就是說,你可以通過基類呈現(xiàn)核心思想,從基類繼承的子類則為核心思想提供不同的實現(xiàn)方式。


有時基類和子類的方法都是一樣的,這時你就可以直接用子類的對象代替基類的對象,這種純替代關系通常叫做替換原則。


有時,子類會添加一些新的方法,此時就是不完美替換。


3、多態(tài)

通過將子類對象引用賦給父類對象引用來實現(xiàn)動態(tài)方法調(diào)用。

四、單根層次結(jié)構(gòu)

Java就是一個很明顯的單根層次結(jié)構(gòu)的語言,所有的類都繼承自Object類。


單根層次結(jié)構(gòu)有利于實現(xiàn)垃圾回收期,這也是Java對比C++的一個重要改進。


異常也是一樣的,異常的根類是Throwable,Throwable的直接子類是Exception和Error。


五、集合

通常情況下解決一個問題可能需要多個對象,也無法確切的知道要申請多大的內(nèi)存空間,這時我們可以建一個新的對象,囊括你所需要的一切,這個新對象就稱為集合。


Java中最重要的集合有l(wèi)ist、map、set、queue、tree、stack等。

常用集合的分類:


Collection 接口的接口 對象的集合(單列集合)

├——-List 接口:元素按進入先后有序保存,可重復

│—————-├ LinkedList 接口實現(xiàn)類, 鏈表, 插入刪除, 沒有同步, 線程不安全

│—————-├ ArrayList 接口實現(xiàn)類, 數(shù)組, 隨機訪問, 沒有同步, 線程不安全

│—————-└ Vector 接口實現(xiàn)類 數(shù)組, 同步, 線程安全

│ ———————-└ Stack 是Vector類的實現(xiàn)類

└——-Set 接口: 僅接收一次,不可重復,并做內(nèi)部排序

├—————-└HashSet 使用hash表(數(shù)組)存儲元素

│————————└ LinkedHashSet 鏈表維護元素的插入次序

└ —————-TreeSet 底層實現(xiàn)為二叉樹,元素排好序


Map 接口 鍵值對的集合 (雙列集合)

├———Hashtable 接口實現(xiàn)類, 同步, 線程安全

├———HashMap 接口實現(xiàn)類 ,沒有同步, 線程不安全-

│—————–├ LinkedHashMap 雙向鏈表和哈希表實現(xiàn)

│—————–└ WeakHashMap

├ ——–TreeMap 紅黑樹對所有的key進行排序

└———IdentifyHashMap


Java集合基礎知識總結(jié)(絕對經(jīng)典)


六、泛型

在Java5之前,JAVA語言的集合所支持的通用類型是Object。因為單根結(jié)構(gòu)決定了所有對象都屬于Object類型,所以一個持有Object的集合就可以持有任何對象,這就使得集合十分易于復用。


其實并不能保存原始數(shù)據(jù)類型,不過自動裝箱機制在一定程度上解決了這個問題。


當集合中持有Object類型時,要添加一個對象到集合中,該對象會向上轉(zhuǎn)型為Object,從而失去了原本的類型。當你需要將其取出時,會獲得一個Object類型的對象引用,這就不是當初的類型了,需要進行向下轉(zhuǎn)型。但除非明確知道對象的具體類型,否則向下轉(zhuǎn)型是不安全的,轉(zhuǎn)型失敗會拋出異常。


這個問題的解決方式是“參數(shù)化類型”,一個被參數(shù)化的類型是一種特殊的類,可以讓編譯器自動適配特定的類型,參數(shù)化類型也叫泛型,通過尖括號中間加上類名來定義泛型,比如List<String>。

七、對象的創(chuàng)建和聲明周期

對象的創(chuàng)建需要消耗一些資源,尤其是內(nèi)存資源。


當我們不再需要一個對象時,就要及時清理它,這樣占用的資源才能被釋放并重復使用。


如果要最大化運行時效率,可以通過棧區(qū)(局部變量)來保存對象,或者將對象保存在靜態(tài)區(qū)里,這樣在編寫程序時就可以明確的知道對象的內(nèi)存分配和生命周期,這種做法會優(yōu)先考慮分配和釋放內(nèi)存的速度。但是代價就是犧牲了靈活性,因為你必須在編寫代碼時就明確對象的數(shù)量、生命周期以及類型,但是這種寫法的限制性很大。


還有一種方案是在內(nèi)存池中動態(tài)創(chuàng)建對象,這個內(nèi)存池也就堆。如果使用這個方案,直到運行時你才能知道需要多少對象,以及它們的生命周期和確切的類型是什么。如果需要創(chuàng)建一個新對象,可以直接通過堆來創(chuàng)建。因為堆是在運行時動態(tài)管理內(nèi)存的,所以堆分配內(nèi)存所花費的時間通常會比棧多一些。棧通常利用匯編指令向下或向上移動棧指針來管理內(nèi)存,而堆何時分配內(nèi)存則取決于內(nèi)存機制的實現(xiàn)方式。


Java只允許動態(tài)分配內(nèi)存,每當要創(chuàng)建一個對象時,都需要使用new來創(chuàng)建一個對象的動態(tài)實例。


如果在棧中創(chuàng)建對象,編譯器會判斷對象存在時間以及負責自動銷毀該對象。


如果在堆中創(chuàng)建對象,編譯器就無法得知對象的生命周期。


Java支持垃圾回收機制,它會自動找到?jīng)]用的對象將其銷毀。


八、異常處理

異常處理是將編程語言和錯誤處理機制直接綁定在一起,異常從錯誤發(fā)生處拋出,根據(jù)錯誤類型,可以對其進行捕獲。由于異常的存在,降低了編寫代碼的成本,不用經(jīng)常反復檢查各種錯誤。


如果拋出異常,就確保了它會被有效的處理,這也增強了程序的健壯性。


Java的異常處理機制在眾多編程語言中幾乎可以說是鶴立雞群的,異常時Java唯一允許的報錯方式,如果你的代碼沒有正確的處理異常,就會得到一條編譯時的報錯消息。


??詳解Java異常??代碼報錯怎么辦,try catch蓋住不就好了?

九、數(shù)據(jù)保存在哪里

1、寄存器

寄存器是速度最快的數(shù)據(jù)存儲方式,數(shù)據(jù)直接保存在中央處理器,然而寄存器的數(shù)量是有限的,所以只能按需分配。


JVM中有4種常見的寄存器:


pc程序寄存器

optop操作數(shù)棧頂指針

frame當前執(zhí)行環(huán)境指針

vars指向當前執(zhí)行環(huán)境中第一個局部變量的指針

所有寄存器都為32位。


pc用于記錄程序的執(zhí)行,optop,frame和vars用于記錄指向Java棧區(qū)的指針。


2、棧

數(shù)據(jù)存儲在隨機存取存儲器里,處理器可以通過棧指針直接操作該數(shù)據(jù)。具體來說,棧指針向下移動將申請一塊新的內(nèi)存,向上移動則會釋放這塊內(nèi)存。這是一種及其迅速和高效的內(nèi)存分配方式,其效率僅次于寄存器。只不過Java系統(tǒng)在創(chuàng)建應用程序時就必須明確棧上所有對象的生命周期。這種限制約束了程序的靈活性,因此雖然有一些數(shù)據(jù)會保存在棧上,對象本身卻并非如此。


3、堆

堆是一個通用的內(nèi)存池,用于存放所有Java對象,new出來的對象都存放在堆中。堆內(nèi)存的分配和清理要比棧存儲話費更多的時間。


4、常量存儲

常量通常會直接寫在程序代碼中,不可變。


5、非RAM存儲

不保存在應用程序里的數(shù)據(jù),最典型的例子就是序列化對象,它指的是轉(zhuǎn)換為字節(jié)流并可以發(fā)送到其它機器的對象。另一個例子則是持久化對象,它指的是保存在磁盤上的對象。也支持使用數(shù)據(jù)庫存儲對象信息。


大多數(shù)微處理芯片有額外的緩存內(nèi)存,只不過緩存內(nèi)容使用的是傳統(tǒng)的內(nèi)存管理方式,而非寄存器。


一個例子是字符串常量池,所有字符串和字符串常量都會被自動放置到這個特殊的存儲空間中。


特殊情況 -> 原始類型


原始類型是直接創(chuàng)建一個“自動變量”,不是引用,該變量直接在棧上保存它的值,運行效率更高。

十、Java中的一些常見概念

1、數(shù)組

Java的數(shù)組一定會被初始化,并且無法訪問數(shù)組邊界之外的元素,這種邊界檢查的代價是需要消耗少許內(nèi)存,以及運行時需要少量時間來驗證索引的正確性。當創(chuàng)建一個放置對象的數(shù)組時,實際上數(shù)組里包含的是引用,這些引用都有一個特殊的值null,Java會認為null的引用沒有指向任何對象,所以當你操作引用之前,需要確保將其指向了某個對象。如果你試圖操作一個值為null的引用,系統(tǒng)會返回一個運行時錯誤。


2、移位操作符

移位操作符也操縱二進制位,它們只能用來處理基本類型里的整數(shù)類型。左移位操作符(<<)會將操作符左側(cè)的操作數(shù)向左移動,移動的位數(shù)在操作符右側(cè)指定(低位補0)。“有符號”的右移位操作符(>>)則按照操作符右側(cè)指定的位數(shù)將操作符左側(cè)的操作數(shù)向右移動。“有符號”的右移位操作符使用了“符號擴展”:如果符號為正,則在高位插入0,否則在高位插入1。


3、按位操作符

按位操作符用來操作整數(shù)基本數(shù)據(jù)類型中的單個二進制位(bit)。按位操作符會對兩個參數(shù)中對應的二進制位執(zhí)行布爾代數(shù)運算,并生成一個結(jié)果。


4、三元運算符

相當于ifelse。

ned



java基礎知識點的評論 (共 條)

分享到微博請遵守國家法律
新民市| 昌都县| 漳州市| 揭阳市| 长丰县| 水城县| 七台河市| 渭源县| 政和县| 渝北区| 桐乡市| 达日县| 武山县| 江口县| 克什克腾旗| 金塔县| 吐鲁番市| 潍坊市| 霍城县| 鹤山市| 秦安县| 台北县| 甘德县| 玛沁县| 广饶县| 阳信县| 遂宁市| 错那县| 喜德县| 霍山县| 金乡县| 景东| 綦江县| 涡阳县| 镇赉县| 客服| 姚安县| 玉环县| 清原| 沅陵县| 湄潭县|