Thinking In Java 讀書筆記(一)

接觸java也有一年時間了,當初學習java的初衷原本是為了開發android的手機應用。到后來發現java能做的事情還有很多。盡管自己也算獨立做過一個完整的從手機app端到jjavaee服務器端的項目,但后來發現提升越來越困難,歸根結底還是自己對java的理解還不夠深入,只會使用別人寫好的框架,不會自己造輪子。逐漸認識到自己對Java的理解還是很淺薄。為此決定重新學一次java,希望能收獲不一樣的東西。

  • java對象是如何被創建的

    我們都知道,java是完全面向對象的語言,不同于面向過程的c語言以及半面向對象的c++,在java中幾乎所有的東西都可以被看作對象,為什么是幾乎呢?因為還有八種基本數據類型,它們不屬于對象。但他們有對應的包裝類型彌補這個缺陷,所以說java完全面向對象也不為過。

  1. 國際慣例,先來個Hello World壓壓驚。

    public class Test {
     public static void main(String args[]){
         String s=new String("Hello World!");
     }
    }
    

    這個栗子簡單的不能在簡單了,但你有清楚這句代碼后面到底做了哪些工作嗎?

    • 我們來詳細理解一下,首先 new String("Hello World!")代表了向堆內存中動態申請一塊內存區域,這塊區域用于存儲你創建的對象。那么前面的String s又代表什么意思呢?其是 s 在這里只代表一個引用,這個引用指向了你剛剛申請的這塊內訓區域。就像你剛剛買一臺電視機,你想要換臺,又懶得跑到電視機面前。你就需要一臺遙控器,通過遙控器就可以操控電視機了。這里申請的內存就是電視機,引用其是就是遙控器。
  2. 了解這些我們再來個復雜點的

    public class Test {
     public static void main(String args[]){
         
         User u1=new User();
         u1.setMoney(200);
         System.out.println("u1有"+u1.getMoney());
         
         User u2=u1;
         u2.setMoney(100);
         
         System.out.println("u1有"+u1.getMoney());
         System.out.println("u2有"+u2.getMoney());
     }
    }
    
    
    • User是一個只有一個money屬性的類,我們u1是一個有200塊錢的人,然后有一個u2和u1一樣它只有100塊,我們來看看運行結果

      u1有200

      u1有100

      u2有100

    • 我們看到u1本來有兩百的,最后也變成的一百。明明后面只對u2進行了操作呀。這就是我們之前說的,u2=u1并不會為u2單獨去堆內存里面申請一塊內存,只是復制了一份u1的引用。就像有人去買了一個和你之前用的一模一樣的遙控器。這樣它也可以操控電視機了。當它把內存中的東西改掉之后,u1的值也會跟著改變的,畢竟u1僅僅就是一個引用而已(這些引用都是放在堆棧之中的)

    • 同理,我們在調用函數的時候也是這樣,函數內部也會幫我們復制一份引用,從而對內存進行操作,但是對本身傳入的引用沒有任何影響。

  • 了解了這些我們再來談談對象是如何被銷毀的

    在java中有個叫做垃圾回收器(Garbage Collection)的東西負責回收沒用的內存。(在C++中這些操作都是要程序員去做的,難怪寫C++的都看不起寫java的,畢竟難度系數就就提升了一個檔次)。由于java申請的內存都是在堆內存中的,所以計算機需要大量的時間花在分配內存上(如果放在堆棧之中的話就會簡單很多了,只需要上下移動堆棧的指針即可)。所以也別怪java的運行效率比c++慢了,畢竟它幫你做了這么工作呢!

    • 那么問題來了,什么樣的對象才會被垃圾回收器回收呢?

      簡單來說呢,就是當一塊內存不被任何引用指向的時候就會被回收,又有小伙伴問了,什么情況下才會出現這種情況呢,我們來舉個栗子:

      public void cool(){
              String str=new String();
          }
      

      在函數執行完成后str生命周期就結束了,剛剛申請的這塊內存沒有人指向,所以也就沒了。

      public class Test {
          public static void main(String args[]){
              new User();
          }
      }
      

      或者像這種,直接new一個對象(當然這沒有什么意義),其它也有很多情況,這里就不一一列舉了,主要因為暫時我也沒想出來。

  • 好了,基本也差不多了。初級小菜鳥第一次寫,望各位dalao發現問題及時矯正。更多的當然是希望和大家一起學習,共同進步。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,737評論 18 399
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,829評論 18 139
  • 概述 線程間協作即有多個線程需要按照一定順序相互協作進行。主要有兩種方法來實現,使用鎖(互斥)來同步兩個任務的行為...
    不咸_閱讀 324評論 0 0
  • 半個月前,今年五十九的老李,跟父親同齡。半夜輾轉反側,起身給他倒了杯水。一問才知,他腰跟后背痛,連呼吸都會痛。我說...
    獨行小P孩閱讀 258評論 0 1
  • 定義:實例化一個對象。 當我們使用類通過“new”關鍵詞來創建一個對象時,其實就是調用了這個類的構造方法。
    辣個男人OvO閱讀 120評論 0 0