籠統說,一個流程簡單一個複雜,面向過程比如開車上路,能夠簡單羅列出幾個動做:上車,系安全帶,點火,出發;向過程比如造出一輛汽車,確定不能從焊鐵作起,第一步是收集所須要的各個部分(對象),經過必定的規律與邏輯去操做對象完成最終的結果。java
對象是實際的東西,類是對象的模板,對對象的抽象,對象就按照類所規定的模板去造成實際的對象。算法
由於咱們不想向外部暴露咱們的數據,由於若是咱們的數據對外暴露的話,咱們的數據若是在某個被他人調用的地方被修改咱們是不可知的,因此有個封裝。你按我對外提供的接口進行操做,保證你不會對我對象內部的結構進行破壞。數組
多態,就是多種形態。多態大體有兩種狀況:安全
第一,假如,一個動物類,動物有一個run方法,咱們用這個類描述動物的運動,而後有個貓,處於面向對象的相關聯思想,貓繼承自動物,而後貓不滿意這個方法,重寫了一個,貓的run的時候有一個叫的動做,不一樣對象,同一動做,最終執行的效果不一樣。ide
第二:有一個貓,這個貓的run是有參數的,調用了貓的run方法,貓開始跑,每小時20邁,而後咱們再調用run方法,傳了一個魚給貓,貓吃了魚就更有動力,而後每小時30邁開始跑。同一個對象,同一個行爲,傳遞的消息不一樣,最終執行的效果不一樣。函數
繼承與多態要一塊兒理解,繼承是基礎,多態是擴展。由於對象之間會有重複的代碼,因此咱們有了繼承,就像現實生活中子女繼承父母的資源同樣,但這種方法只能解決有關聯對象間的代碼重複問題。若是對象之間無關,解決代碼重複,咱們須要依賴AOP。線程
多態是在繼承的基礎上實現的,多態實現的三個必要條件:
繼承
方法重寫(override)
父類引用指向子類對象,例如:Human human = new Man() ,new Man() 是一個子類對象,用一個父類引用human來指向子類對象。code
棧內存,堆內存,方法區(隸屬於堆裏,可是有必要單獨拉出來談)對象
基本數據類型 ,結構大體爲:變量名 :變量值 這樣的表格形式繼承
棧是線程私有的,連續的,不一樣線程之間沒法共享數據。
速度快
堆是線程間共享的,區域比棧大,速度慢,不連續的
存儲對象(在棧裏對象存儲的是一個地址,例如 張三:0X0001)對象張三具體的信息要去0X0001這塊內存塊裏找。
存儲不變的東西:
類加載信息,靜態變量,字符串常量。也就是不依賴具體對象的信息。
每一個對象有一個引用計數屬性,新增一個引用時計數加1,引用釋放時計數減1,計數爲0時能夠回收。此方法簡單,沒法解決對象相互循環引用 的問題。(例如,)
從GC Roots開始向下搜索,搜索所走過的路徑稱爲引用鏈。當一個對象到GC Roots沒有任何引用鏈相連時,則證實此對象是不可用的。不可達對象。
靜態變量與方法不須要具體的對象就能夠調用(用類名調用),靜態初始化塊new後就會調用了。
方法的重寫(override)要遵循兩同兩小一大的原則:(子類方法相對於父類方法)
1)兩同
1.1)方法名相同
1.2)方法參數列表相同
2)兩小
2.1)返回類型若爲引用類型必須小於或等於父類的,若爲基本類型或者void則必須相同
2.2)拋出的異常必須小於等於父類的
3)一大
子類方法的訪問權限要大於等於父類的
這個Java類必須具備一個無參的構造函數
屬性必須私有化。
私有化的屬性必須經過public類型的方法暴露給其它程序,而且方法的命名也必須遵照必定的命名規範。
for(int val:a)
{
System.out.println(val);
}