摘要:一旦線程執行線程會進入可執行狀態,它會在可執行與執行中兩種狀態中來來去去,同時也有另外一種狀態暫時不可執行又稱為被堵塞狀態。當對象有一個或多個同步化的方法時,線程只有在取得對象鎖的鑰匙時才能進入同步化的方法。
前言:
今天要分享的是關于 《Head First Java》這本書的讀后感,這本書有點小厚差不多有七百頁左右,所以我花了幾乎整個國慶的時間去閱讀,學習。讀完之后發現,受益頗多。正如書名所說的,它是一本重視大腦的學習指南。無論你是Java開發工程師,還是android開發工程師,這本書都是良師益友。下面讓我們一起看看,我會以零碎的列表方式呈現,并以通俗的方式講解那些你迷糊不清的細節?(細心的你恐怕已經發現了,這個系列的文章的前言都是一毛一樣的,因為我不確定你先點開的是第幾篇,哈哈)
正文:[1]將被序列化的對象寫到文件中,然后就可以讓你的程序去文件中讀取序列化的對象并把它們展開回到活生生的狀態。序列化的文件時很難讓一般人閱讀的,但他比純文本文件更容易讓程序恢復會原來的狀態,也比較安全,因為一般人不會知道如何動手動腳改數據。
[2] Stream這類串流需要兩兩連接才能做出有意義的事情,一個是低層的串流,一個高層的串流,這樣的設計是出于面向對象考慮,一個類只做好一件事。同時通過組合不同的串流,又可以變化出很多花樣。
[3]序列化的對象保存了實例變量的值,因此之后可以在堆上帶回一模一樣的實例。比較叼的就是當對象被序列化時,被該對象引用的實例變量也會被序列化。且所有被引用的對象也會被序列化。。。。最棒的是,這些操作都是自動進行的!
[4]如果要讓類能夠被序列化,就實現Serializable。Serializable接口又被稱為marker或tag類的標記用接口,因為此接口并沒有任何方法需要實現的。如果某類事可序列化的,則它的子類也自動地可以序列化(接口的本意就是如此)。
[5]如果一個類中有引用到其他不可序列化的對象,那么這個類也是無法序列化的,切記!如果有變量不想被序列化的,則用transient來修飾變量即可。那些變量主數據類型值會變成默認值,引用的變量會變成null。
[6]如果有兩個對象都有引用實例變量指向相同的對象對怎么樣?例如兩個Cat都有相同的Owner對象?那Owner會被存儲兩次嗎?答案:序列化聰明得足以分辨兩個對象是否相同,在此情況下只有一個對象會被存儲,其他引用會復原成指向改對象。
[7] FileInputStream跟ObjectInputStream組合使用的時候,如果os.close();的話FileInputStream會自動跟著關掉!
[8]被序列化的對象在解序列化的時候,它的構造函數是不會執行的!切記!
[9]靜態變量,它們會被序列化嗎?答案:不會。要記得static代表“每個類一個”而不是“每個對象一個”。當對象被還原時,靜態變量會維持類中原本的樣子,而不是存儲時的樣子,自己測試哈。
[10]關于File有個很有用的功能就是它提供一種比使用字符串文件名來表示文件更安全的方式。
[11]緩沖區的奧妙之處就在于使用緩沖區比沒有使用緩沖區的效率更高。因為每趟磁盤操作都會比內存操作要花費跟多時間。通過BufferedWriter和FileWriter的鏈接,BufferedWriter可以暫存一堆數據,然后到滿的時候再實際寫入磁盤,這樣就可以減少對磁盤操作的次數,從而提高效率。
[12]如果想要強制緩沖區立即寫入,只要調用writer.flush()這個方法即可
[13] String的split()可以把字符串拆開成數組。
[14]每臺服務器上都有65536個端口,但是我們自己在寫測試socket的時候,用的端口都要在1023之后,因為0~1023都已經被保留給已知的特定服務。
[15] Socket serverSocket = new Socket("127.0.0.1",5000)這是建立服務器的Socket連接寫法。Socket sock = serverSocket.accept();當用戶連上來的時,此方法會返回一個Socket(在不同的端口上)以便與客戶端通信。Socket與ServerSocket的端口不相同,因此ServerSocket可以空出來等待其他的用戶。
[16]當啟動多線程的時候,我們會覺得同時在做好幾件事情,其實只有真正的多處理器系統能夠同時執行好幾件事,所以其實多線程只是在執行空間里面非常地快速來回交換執行而已。
[17] Runnable threadJob = new MyRunnable();,該類就是你對線程要執行的任務的定義,也就是說此方法會在線程的執行空間運行。
[18]一旦線程執行.start();線程會進入可執行狀態,它會在可執行與執行中兩種狀態中來來去去,同時也有另外一種狀態:暫時不可執行(又稱為被堵塞狀態)。
[19]當多個線程同時操作同一個對象的時候,容易發生數據錯誤的情況,解決方式就是同步化方法,synchronized。當對象有一個或多個同步化的方法時,線程只有在取得對象鎖的鑰匙時才能進入同步化的方法。從而保護數據的安全。(不過代價就是損耗性能,需要自己權衡)同時注意死鎖的情況。
[20]每個Java對象都有一個鎖,每個鎖只有一把鑰匙。類也有個鎖,?
[21]高級java類設計中,泛型的使用是非常高明的,什么是泛型,只要你看到<>就是了,其實到處都是。以泛型的觀點來說,extend代表extend或implement。哈哈,不看不知道哈
[22]數組的類型是在運行期間檢查的,但集合的類型檢查只會發生在編譯期間,在多態賦值的時候,集合可沒那么容易讓你過哈,?
[23]遠程過程調用的設計,要創建4種東西:服務器,客戶端,服務器輔助設施和客戶端輔助設施。其實真相就是兩個輔助設施兩者在負責通信,客戶端跟服務器只是把命令給他們,結果拿回來而已。
大結局啦,?,其實這三篇文章是我看完之后,覺得有必要從七百多頁的書中提出去來的要點,也希望對大家有幫助。我們可是攻城獅,fight!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64660.html
摘要:對象本身已知的事物被稱為實例變量俗稱屬性。對象可以執行的動作稱為方法。變量根據作用域分為全局變量,局部變量。對象有狀態和行為兩種屬性,狀態影響行為,行為影響狀態。 前言: 今天要分享的是關于《Head First Java》這本書的讀后感,這本書有點小厚差不多有七百頁左右,所以我花了幾乎整個國慶的時間去閱讀,學習。讀完之后發現,受益頗多。正如書名所說的,它是一本重視大腦的學習指南。無論...
摘要:局部變量和方法的參數都是被聲明在方法中,它們是暫時的,且生命周期只限于方法在放在棧上的這段期間也就是方法調用至執行完畢為止。讓一個類不被實例化的方法有兩種一種是將類聲明稱抽象類,第二種是將其構造函數標記為私有的。 前言: 今天要分享的是關于 《Head First Java》這本書的讀后感,這本書有點小厚差不多有七百頁左右,所以我花了幾乎整個國慶的時間去閱讀,學習。讀完之后發現,受益頗...
閱讀 4637·2021-10-25 09:48
閱讀 3217·2021-09-07 09:59
閱讀 2198·2021-09-06 15:01
閱讀 2701·2021-09-02 15:21
閱讀 2738·2019-08-30 14:14
閱讀 2192·2019-08-29 13:59
閱讀 2523·2019-08-29 11:02
閱讀 2541·2019-08-26 13:33