好程式設計師Java培訓分享零基礎快速入門Java
好程式設計師Java 培訓分享零基礎快速入門 Java, 學習 Java ,掌握一些基本的概念是第一步,本文簡單為大家介紹一些入門級的內容,希望幫助零基礎小白快速入門。
一、基本概念
JVM : java 虛擬機器,負責將編譯產生的位元組碼轉換為特定機器程式碼,實現一次編譯多處執行 ;
JRE : java 執行時環境,包含了 java 虛擬機器 jvm , java 基礎類庫。是使用 java 語言編寫的程式執行所需要的軟體環境 ;
JDK : java 開發工具包,是編寫 java 程式所需的開發工具。 JDK 包含了 JRE ,同時還包含了編譯器 javac ,除錯和分析工具, JavaDoc 。
二、Java 是如何編譯和執行的 ?
上圖表示了Java 程式碼是怎麼編譯和載入的。整個流程從 Java 原始碼開始,經過 javac 程式處理後得到類檔案,這個檔案中儲存的是編譯原始碼後得到的 Java 位元組碼。類檔案是 Java 平臺能處理的最小功能單位,也是把新程式碼傳給執行中程式的唯一方式。
新的類檔案透過類載入機制載入虛擬機器,從而把新型別提供給直譯器執行。
三、Object 的重要方法
所有類都直接或間接擴充套件 java.lang.Object 類。這個類定義了很多有用的方法,而且你可以根據需求來重寫這些方法。
1 、 toString 方法
toString 方法的作用是返回物件的文字表示形式。連線字串或使用 System.out.println 等方法時,會自動在物件上呼叫這個方法。給物件提供文字表示形式,十分利於除錯或記錄日誌,而且精心編寫的 toString 方法還能給報告生成等任務提供幫助。
Object 類中的 toString 方法返回的字串由物件所屬的類名和物件的十六進位制形式雜湊碼 ( 由 hashCode 方法計算得到,本章節稍後會介紹 ) 組成。這個預設的實現方式提供了物件的型別和標識兩個基本資訊,但一般並沒什麼用。
2 、 equals 方法
== 運算子測試兩個引用是否指向同一個物件 ( 比較兩個記憶體單元的內容是否一樣 ) 。如果要測試兩個不同的物件是否相等,必須使用 equals 方法。任何類都能覆蓋 equals 方法,定義專用的相等比較方式。 Object.equals 方法直接使用 == 運算子,只有兩個物件是同一個物件時,才判定二者相等。
很多類以及自定義類的equals 方法都需要重寫,是需要根據場景與需求來定製的。 JDK 自帶的許多類往往都是:
對比一些簡單的屬性值
再對比複雜的屬性值or 對比業務上最快能區分物件的值
再對比其他的值or 對比地址、長度
主要為了將那些不匹配的情況儘快排除
3 、 hashCode 方法
Java 中的 hashCode 方法就是根據一定的規則將與物件相關的資訊 ( 比如物件的儲存地址,物件的欄位等 ) 對映成一個數值,這個數值稱作為雜湊值。如果集合中已經存在一萬條資料或者更多的資料,如果採用 equals 方法去逐一比較,效率必然是一個問題。
此時hashCode 方法的作用就體現出來了,當集合要新增新的物件時,先呼叫這個物件的 hashCode 方法,得到對應的 hashcode 值,實際上在 HashMap 的具體實現中會用一個 table 儲存已經存進去的物件的 hashcode 值,如果 table 中沒有該 hashcode 值,它就可以直接存進去,不用再進行任何比較了 ;
如果存在該hashcode 值,就呼叫它的 equals 方法與新元素進行比較,相同的話就不存了,不相同就雜湊其它的地址,所以這裡存在一個衝突解決的問題,這樣一來實際呼叫 equals 方法的次數就大大降低了。
另外注意,預設的hashCode 會發起 native 呼叫,如果用 hashCode 對兩個物件對比,會導致開銷增大。
hashcode 方法的作用:
只要覆蓋了 equals 方法,就必須覆蓋 hashCode 方法。 hashCode 方法返回一個整數,用於雜湊表資料結構。如果兩個物件經 equals 方法測試是相等的,它們就要具有相同的雜湊碼。
不相等的物件要具有不相等的雜湊碼( 為了雜湊表的操作效率 ) ,這一點很重要,但不是強制要求,最低要求是不相等的物件不能共用一個雜湊碼。為了滿足最低要求, hashCode 方法要使用稍微複雜的演算法或位操作。
Object.hashCode 方法和 Object.equals 方法協同工作,返回物件的雜湊碼。這個雜湊碼基於物件的身份生成,而不是物件的相等性。 ( 如果需要使用基於身份的雜湊碼,可以透過靜態方法 System.identityHashCode 獲取 Object.hashCode 方法的返回值。 )
4 、 hashCode 和 equal 方法
hashCode 的存在主要是用於查詢的快捷性,如 Hashtable , HashMap 等, hashCode 是用來在雜湊儲存結構中確定物件的儲存地址的 ;
如果兩個物件相同,就是適用於equals(java.lang.Object) 方法,那麼這兩個物件的 hashCode 一定要相同 ;
如果物件的equals 方法被重寫,那麼物件的 hashCode 也儘量重寫,並且產生 hashCode 使用的物件,一定要和 equals 方法中使用的一致,否則就會違反上面提到的第 2 點 ;
兩個物件的hashCode 相同,並不一定表示兩個物件就相同,也就是不一定適用於 equals(java.lang.Object) 方法,只能夠說明這兩個物件在雜湊儲存結構中,如 Hashtable ,他們 " 存放在同一個籃子裡 " 。
5 、 Comparable::compareTo 方法
如果一個類實現了 Comparable 介面,就可以比較一個例項是小於、大於還是等於另一個例項。這也表明,實現 Comparable 介面的類可以排序。
因為 compareTo 方法不在 Object 類中宣告,所以由每個類自行決定例項能否排序。如果能排序就定義 compareTo 方法,實現例項排序的方式。
compareTo 方法返回一個 int 型別的值,這個值需要進一步說明。如果當前物件 (this) 小於傳入的物件, compareTo 方法應該返回一個負數 ; 如果兩個物件相等,應該返回 0; 如果當前物件大於傳入的物件,應該返回一個正數。
6 、 clone 方法
Object 類定義了一個名為 clone 的方法,這個方法的作用是返回一個物件,並把這個物件的欄位設為和當前物件一樣。 clone 方法不常用,原因有兩個。
其一,只有類實現了 java.lang.Cloneable 介面,這個方法才有用。 Cloneable 介面沒有定義任何方法 ( 是個標記介面 ) ,因此若想實現這個介面,只需在類簽名的 implements 子句中列出這個介面即可。
其二,clone 方法宣告為 protected ,因此,如果想讓其他類複製你的物件,你的類必須實現 Cloneable 介面,並覆蓋 clone 方法,而且要把 clone 方法宣告為 public 。
clone 方法很難正確實現,而副本構造方法實現起來更容易也更安全 ;
7 、 finalize 方法
一種古老的資源管理技術叫終結(finalization) ,開發者應該知道有這麼一種技術。然而,這種技術幾乎完全廢棄了,任何情況下,大多數 Java 開發者都不應該直接使用。
只有少數應用場景適合使用終結,而且只有少數 Java 開發者會遇到這種場景。如果有任何疑問,就不要使用終結,處理資源的 try 語句往往是正確的替代品。
終結機制的作用是自動釋放不再使用的資源。垃圾回收自動釋放的是物件使用的記憶體資源,不過物件可能會儲存其他型別的資源,例如開啟的檔案和網路連線。垃圾回收程式不會為你釋放這些額外的資源,因此,終結機制的作用是讓開發者執行清理任務,例如關閉檔案、中斷網路連線、刪除臨時檔案,等等。
終結機制的工作方式是這樣的:如果物件有 finalize 方法 ( 一般叫作終結方法 ) ,那麼不再使用這個物件 ( 或物件不可達 ) 後的某個時間會呼叫這個方法,但要在垃圾回收程式回收分配給這個物件的空間之前呼叫。終結方法用於清理物件使用的資源。
另外注意,這是一個例項方法。而在類上,沒有等效的機制。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2704317/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java培訓分享如何快速入門Java程式設計師Java
- 好程式設計師Java培訓分享如何快速入門Java程式設計程式設計師Java
- 好程式設計師Java培訓分享SpringBoot入門篇程式設計師JavaSpring Boot
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- 好程式設計師Java培訓分享零基礎學Java能行嗎 有哪些難點程式設計師Java
- 好程式設計師Python培訓分享基礎入門Django程式設計師PythonDjango
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Java培訓分享學習Java需要哪些基礎程式設計師Java
- 好程式設計師Java培訓分享學Java需要什麼基礎?程式設計師Java
- 好程式設計師Java培訓分享Java基礎知識總結程式設計師Java
- 好程式設計師Java培訓分享SpringBoot -YAML程式設計師JavaSpring BootYAML
- 好程式設計師Java培訓分享初學入門須掌握4大核心基礎!程式設計師Java
- 好程式設計師Java培訓零基礎學Java開發注意什麼程式設計師Java
- 好程式設計師Java培訓分享Java之反射技術程式設計師Java反射
- 好程式設計師Java培訓分享Java包是什麼?程式設計師Java
- 好程式設計師Java培訓分享Java多執行緒程式設計師Java執行緒
- 好程式設計師Java培訓分享Java類載入的過程概述程式設計師Java
- 好程式設計師Java培訓分享maven-概述程式設計師JavaMaven
- 好程式設計師Java培訓分享BigDecimal的用法程式設計師JavaDecimal
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java
- 好程式設計師Python培訓分享Python入門基礎知識程式設計師Python
- 好程式設計師Java培訓分享Java EE與Java的區別程式設計師Java
- 好程式設計師Java培訓分享學Java程式設計要注意什麼程式設計師Java
- 好程式設計師Java培訓分享Java和HTML的區別?程式設計師JavaHTML
- 好程式設計師Java培訓分享Java物件導向概念解析程式設計師Java物件
- 好程式設計師Java培訓分享Java初學者必讀程式設計師Java
- 好程式設計師Java培訓分享SpringBoot -啟動流程程式設計師JavaSpring Boot
- 好程式設計師Java培訓分享For迴圈詳解程式設計師Java
- 好程式設計師Java培訓分享Spring Ioc的原理程式設計師JavaSpring
- 好程式設計師Java培訓分享本地快取如何設計程式設計師Java快取
- 好程式設計師Java培訓幫你整理Java入門常用工具程式設計師Java
- 好程式設計師Java培訓分享Java面試題集合篇一程式設計師Java面試題
- 好程式設計師Java培訓分享Java面試題集合篇二程式設計師Java面試題
- 好程式設計師Java培訓分享面試Java的注意事項程式設計師Java面試
- 好程式設計師Java培訓分享Java中級面試題合集程式設計師Java面試題
- 好程式設計師Java培訓分享Java集合的兩種排序方法程式設計師Java排序
- 好程式設計師Java培訓分享Java讀寫Properties配置檔案程式設計師Java