JAVA基礎_構建開發世界的基本認知?(入門篇)

一、介紹

這篇文章大概有近來最粗糙的文章了。

個人一直認爲什麼東西都有自己的節律存在,代碼同樣的有自己的節律。在正式開發和深入代碼之前有必要對其基礎進行更爲深入的瞭解。本文是最近學習和反思後的一些重整理。

二、分析

 

<基礎概念>

你的代碼經過修改可以去適應新的東西==>可維護性

你的代碼不需要經過修改便能適應新的==>可擴展性

 

<繼承>

1、將子類之間相同代碼,提升到成一個相同的類,那麼這個類父類。子類繼承父類便擁有了父類的內容

2、子類對父類進行擴展

3、擁有父類的公有屬性和公有方法

4、對父類的私有變量和私有方法不能使用

5、子類可以被當成父類的擴展,如果我們傳參爲父類,那麼子類也可以被使用

 

<重寫>

1、子類與父類之間存在着繼承或實現關係。

2、子類對父類不滿意,對父類的方法進行覆蓋

3、方法名稱相同,方法類型相同,參數類型,參數個數相同。

4、訪問權限不能更小

5、返回類型必須是父類返回類型或者是父類返回類型的子類類型

6、不能拋出比父類範圍更大的異常

 

啓示:

@1、原則上父類的私有變量不能被子類直接用,那麼有兩種方式可以使用,一種是將父類的變量給改造成protected(同包及子類可見)

@2、爲父類創建一個有參的構造方法,然後子類去調用父類的構造方法,將值給到父類,父類的變量由父類自己來使用創建。

每個對象在實例化的時候都會默認創建自己的無參構造器,並且有且只有一個無參構造器。當子類繼承父類的時候,子類進行實例化會優先去對父類進行實例化。這個過程中如果父類沒有聲明的無參構造器,子類在創建無參構造器的時候同樣會去通過super()爲父類創建構造器。(父類存在有參構造器後默認不再主動創建無參構造器)

@3、當子類中存在父類的完全一樣的變量,那麼父類的變量就會被隱藏起來。父類的東西都繼承給了子類,無論私有還是公有,但如果父類私有隻能通過父類的方法區去調動。父類可以通過提供方法給子類使用。

 

<重載>

重載屬於一種編譯時多態,意味對同一行爲作出不同的描述。也即是方法的多樣性。他的特點是方法名稱相同,參數類型或者參數個數不同,返回類型可相同也可以不同。

 

<多態變量>

類的本意:類型,變量的類型,方法的類型,類的類型等等

子類:子類的父類的一種子類型。那麼也歸屬於父類的類型的範圍內

啓示1:子類的對象可以傳遞給需要父類對象的函數。子類對象也可以放進存放父類對象的容器中。

多態:在某個時刻他所管理的對象類型是會變化的。允許同一對象對同一請求做出不同響應。左聲明右編譯,同一編譯,父類變量可以指向子類對象,也可以指向父類對象,調用不同的方法。變量可以指向聲明類型的對象或者聲明類型的子類型的對象。

 

<向上造型>

1、cast對於基本數據類型是類型轉換,而對於引用對象類型是造型

2、把一個類型的對象賦值給另外一個類型的變量

3、子類的類型是可以賦值給父類類型的變量

4、變量的賦值是指變量去管理賦值過來的對象。而不是進行替換。

5、向上造型是可以的,但是如果向下造型則取決於父類對象原本的對象是什麼,如果父類變量當前的對象指向了子類對象。那麼再次向下造型是可以的,如果父類變量指向的就是父類對象,那麼必然會報異常。(item實際的類型是什麼,如果原本是子類型,那再次轉下也是可以的)

6、數據轉型:低層級的向高層級轉化的可以直接賦值,高層級向低層級轉化則需要強轉,但是需要註明的是最後還是使用方法去轉化

 

<Objects>

1、單根結構對象的頂端root,默認是一切的父類

2、toStirng返回一個對象的字符串表達形式,如果沒有重寫toString,則返回內存的地址。

3、equals :用於比較兩個對象是否相同,但是objects只是提供了方法,需要自己去實現,當進行對象間引用的時候需要進行重寫

 

<引用>

在計算機程序設計中,弱引用與強引用相對,是指不能確保其引用的對象不會被垃圾回收器回收的引用。一個對象若只被弱引用所引用,則被認爲是不可訪問(或弱可訪問)的,並因此默認是可以在任何時刻被回收。

 

<數據類型與引用類型>

堆和棧是java內存中存放數據的地方。java的類型一般分爲基本數據類型和引用對象類型。我們平時所說的棧就是指的棧幀,我們把JVM運行的空間稱之爲運行時數據區,其中方法區和堆內存是屬於線程共同佔有的,而虛擬機棧,本地方法棧。在棧中主要存放着基本數據類型和引用值變量,也就是常說的字面值。在java的機制中,字面值的變化同樣是先查找後創建,對於一個已經存在的數據,引用值會將地址指向該數據,但其指向後引用值指向的變更的不會影響到數據,有不會影響到其他同樣指向該地址的引用變量!

我們程序所創建的對象則放到對象空間裏面。java裏面將這個對象空間分成了年老區和年輕區。其中年輕區又被細分成了E區,F區,T區。程序運行時創建的對象首先被統一放置在E區,當E區放滿了則會觸發一次垃圾回收,清空E區,將E區存活的對象放置到F區。當E區再一次被放滿了則會再一次觸發垃圾回收,清空E/F區,將E/F區裏面存活的對象放置到T區。如此往返重複,對象隨着GC在FT中反覆複製,當超過某個數值,那麼對象就會被複制到年老區中。當年老區也滿的時候,則會執行Full GC,這個時候如果內存不夠則會造成數據泄漏!

對於堆棧而言,new對象,靜態資源和全局變量都放在堆中,而局部變量則是存放在棧之中。棧在程序中的體現是一個方法啓動時候分配的一個小空間,當方法釋放爲該方法賦值的棧也就走到了盡頭。包括基本數據類型以及引用值的存放等。
 

<String類型>

字符串均爲不可變類型,存儲於常量池或者對象空間創建。每次都會是先在堆中查找,如果查找不到在創建新的對象!並且棧中對其的每一個引用都是不可變的。這裏的不可變是指對象不可變,當引用指向其他對象的數值時候,引用就不再是屬於這個對象的了!

字符串人工的拼接底層都是通過StringBuilder去創建,相當於生成新的對象,是不放在常量池中的。

 

<微服務的理解>

將單體的架構拆分成很多微小的服務,服務之間通過rpc進行關聯

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章