Java暢談1

這幾天一直在看java編程思想這本書。不得不說這是一本好書。接下來談談每讀一段這本書我總結的一些內容。
    首先就是萬物皆對象的理念。雖然仍有8個基本類的存在,但是又提供了它們的包裝類。我們可以通過裝包和拆包來自由的轉換。
    既然是面向對象的,那必定有一個標識來表示吧。這個標識就是class(類)。於是我們可以定義一個類,在向類中添加字段和方法。有人總結類的組成:字段、方法和標識(即這個類在內存中的絕對地址)。
    對於字段和方法我們是有必要來討論訪問權限的。java中一共有四種訪問權限:public,protected,包管理權限(就是沒有修飾),private。四種權限越來越高的。public是對誰都開放的,protected是對繼承的子類是開放的,包管理權限是對當前包下的類都可以訪問的,private是隻有本類自己是可以訪問的。在java代碼中只能有一個public class出現,否則編譯器就會報錯。而且編譯後的.class文件的名字必須是與public class的名字一致。否則最後在jvm中解釋器無法解釋就會報錯。
    有了一定的修飾符,我們在初始化類的時候就先確定哪些字段是用什麼修飾符修飾的。一般情況下字段的修飾都是用private的,如果希望操作和讀某個字段。我的建議是使用getter()和setter()方法。
   接下來的初始化工作,我們希望必須給定義的字段初始化。而且每次都是在使用這些字段之前就執行。於是就出現了構造函數(構造器),絕大數情況我們會在構造器中完成所有的初始化工作。每個類必須要有構造器,如果自己不寫編譯器會默認添加一個無參的構造器。如果自己寫了一個構造器,不論含不含參數編譯器都不會添加構造器了。之後就是定義自己想要的方法。
   當定義完一個類,接下來要做的就是使用。怎麼使用,這裏有兩種類型:組合和繼承。組合就是在一個類中使用其他的類來達到不同類的組合。比如將輪胎類、車門類和發動機類組合爲一個汽車類。組合使用的比較的多。另一個是繼承,即子類繼承父類,使用關鍵字extends,注意一個類只能繼承一個父類。這一點和c++是不一樣的。
   最後說一說java的垃圾回收機制。有了它,我們再也不用擔心內存泄漏。它會將不需要的對象佔用的存儲空間在未來的某個時刻給釋放掉。具體什麼時候我們是不知道的。這樣我們再也不需要什麼析構函數了。對了,垃圾回收機制回收的是new出來的對象。對於不是new出來的對象我們需要自己定義一個叫finalized()的方法。在該方法中完成相應的清理工作。
   垃圾回收機制在回收垃圾是使用一定的技巧的。我們知道對象的定義是包含對象的引用和實例的。就像遙控器和電視機的關係。A a=new A();其中a就是遙控器,等號後面的就是電視機。對象的引用是存儲在內存的堆棧上的,所以執行的時候運行速度會很快的。而所有的對象實例是存放在堆中的。java中的堆存放類似於傳送帶。所以在釋放堆空間的時候是需要技巧的。
   第一種是對象引用計數法,就是給不在需要的對象引用計數。然後集中統計便來處理。實際上這種方法在JVM中從來就沒有被使用過。原因是耗時,而且佔用較多內存資源。
   JVM使用的是第二種被稱之爲自適應模型的方法。它有兩種模式:停止-複製和標記-清理。當不需要某些對象的時候我們使用標記-清理來進行內存的釋放。由於釋放的都是小片的內存,所以會出現大量的內存碎片。這個時候就使用停止-複製模式將程序暫停,然後將堆中的對象複製到一段較爲連續的堆空間中。這樣也會釋放大量的碎片空間,從而釋放大量內存空間。
發佈了45 篇原創文章 · 獲贊 31 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章