圖說Java —— 理解Java機制最受歡迎的8幅圖

来源:http://www.cnblogs.com/aishangJava/archive/2017/09/04/7473820.html
-Advertisement-
Play Games

世間總是一圖勝過千萬言! 下麵的8幅圖來自於 Program Creek 的 Java教程 ,目前這是該網站最受歡迎的文章.希望本文能幫你回顧你已經知道的那些知識。如果圖片講解的不夠清晰,你可能需要閱讀詳細的文章或者進行搜索。 1. String對象不可改變的特性 (詳情請點擊上面的標題查看) 下圖 ...


世間總是一圖勝過千萬言!

下麵的8幅圖來自於 Program Creek 的 Java教程 ,目前這是該網站最受歡迎的文章.
希望本文能幫你回顧你已經知道的那些知識。如果圖片講解的不夠清晰,你可能需要閱讀詳細的文章或者進行搜索。

1. String對象不可改變的特性

(詳情請點擊上面的標題查看)

下圖顯示瞭如下代碼運行的過程:

String s = "abcd";  
s = s.concat("ef");  

中文參考:Java String 詳解 
 

 

2. equals()與hashCode()方法協作約定

HashCode(哈希編碼,散列碼)是設計了用來提高性能的. 
equals()與hashCode()方法之間的關係可以概括為:
2.1 如果兩個對象相等(equal),那麼必須擁有相同的哈希碼(hash code)
2.2 即使兩個對象有相同的哈希值(hash code),他們不一定相等.
中文參考: HashMap的實現原理
 


 

3. Java 異常類層次結構
粉紅色的是受檢查的異常(checked exceptions),其必須被 try{}catch語句塊所捕獲,或者在方法簽名里通過throws子句聲明.
另一類異常是運行時異常(runtime exceptions),需要程式員自己分析代碼決定是否捕獲和處理。
而聲明為Error的,則屬於嚴重錯誤,需要根據業務信息進行特殊處理,Error不需要捕捉。
中文示例: Exception



4. 集合類層次結構關係
註意Collections(工具類) 和 Collection(集合頂層介面) 的區別:
中文參考: Collections

 


5. 鎖——Java同步的基本思想
Java同步(synchronization)機制可以用一座大樓來比喻:
中文參考: 線程同步---synchronized
 



6.Java對象引用處理機制
別名是指多個引用指向同一個記憶體地址(對象實際地址,可以理解為這就是對象),甚至這些引用的類型完全不一樣.
 


7. Java 對象在堆中的記憶體結構
下圖顯示了運行時記憶體中方法和對象所處的地盤
絕大多數情況下:對象(及其屬性域)都保存在堆裡面,而方法的參數,局部變數(引用,以及6種基本類型)保存在棧裡面.
當然,極特殊的情況下(極度優化[對象入棧],常量池[String],靜態變數[方法區]等)也會打破這個潛規則。
 

8. JVM 運行時數據區
下圖顯示了JVM(Java虛擬機)運行時總體的數據區域劃分
 

Java學習交流QQ群:523047986  禁止閑聊,非喜勿進!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、掌握靜態方法和屬性 靜態方法和屬性用於描述某一類對象群體的特征,而不是單個對象的特征。Java中大量應用了靜態方法和屬性,這是一個通常的技巧。但是這種技巧在很多語言中不被頻繁地使用。理解靜態方法和屬性對於理解類與對象的關係是十分有幫助的,在大量的Java規範中,靜態方法和屬性被頻繁使用。因此學習 ...
  • 如下圖, 檢查過maven的pom中已經把servlet相關的jar包依賴進來,但還是有這個錯誤。 需要為eclipse添加目標環境(targeted runtimes) 右擊項目--> properties -->選擇targeted runtimes , 可以添加一個環境 刷新或者編譯這個項目, ...
  • 一道編程題如下: 實例化三個線程,一個線程列印a,一個列印b,一個列印c,三個線程同時執行,要求列印出6個連著的abc 題目分析: 通過題意我們可以得出,本題需要我們使用三個線程,三個線程分別會列印6次字元,關鍵是如何保證順序一定是abc...呢。所以此題需要同步機制來解決問題! 令列印字元A的線程 ...
  • apply() apply(m,dimcode,f,fargs) m 是一個矩陣。 dimcode是維度編號,取1則為對行應用函數,取2則為對列運用函數。 f是函數 fargs是f的可選參數集 ...
  • 第一種方法:按快捷鍵 Win+R (run),然後運行框中輸入cmd。 第二種方法:開始菜單--》運行--》然後運行框中輸入cmd。 第三種方法:在附件當中,找命令行選項即可。 ...
  • bin (binary)二進位 ,JDK當中所有的可以執行的二進位應用程式都放在其中。其中都是*.exe文件,表示可以直接執行程式。 javac.exe和java.exe雙擊後為什麼一閃而過,沒了?因為可執行程式分為兩種:一種是圖形化界面,可以雙擊操作,而另一種是命令行的方式執行的,所以就閃沒了。 ...
  • 我在本地用Jackson可以復現這個問題了。 這是我復現的代碼,我每次產生一個隨機的integer作為map的key,然後用objectMapper反序列化。然後我運行我的另外一個PrintStringTable的類,可以看到每次產生的Integer都會進入Constant Pool中如果我把構造O ...
  • spring boot / cloud (八) 使用RestTemplate來構建遠程調用服務 前言 上周因家裡突發急事,請假一周,故博客沒有正常更新 RestTemplate介紹: RestTemplate是spring框架中自帶的rest客戶端工具類,具有豐富的API,並且在spring clo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...