您好,登錄后才能下訂單哦!
好程序員Java 培訓分享零基礎快速入門 Java, 學習 Java ,掌握一些基本的概念是第一步,本文簡單為大家介紹一些入門級的內(nèi)容,希望幫助零基礎小白快速入門。
一、基本概念
JVM : java 虛擬機,負責將編譯產(chǎn)生的字節(jié)碼轉(zhuǎn)換為特定機器代碼,實現(xiàn)一次編譯多處執(zhí)行 ;
JRE : java 運行時環(huán)境,包含了 java 虛擬機 jvm , java 基礎類庫。是使用 java 語言編寫的程序運行所需要的軟件環(huán)境 ;
JDK : java 開發(fā)工具包,是編寫 java 程序所需的開發(fā)工具。 JDK 包含了 JRE ,同時還包含了編譯器 javac ,調(diào)試和分析工具, JavaDoc 。
二、Java 是如何編譯和執(zhí)行的 ?
上圖表示了Java 代碼是怎么編譯和加載的。整個流程從 Java 源碼開始,經(jīng)過 javac 程序處理后得到類文件,這個文件中保存的是編譯源碼后得到的 Java 字節(jié)碼。類文件是 Java 平臺能處理的最小功能單位,也是把新代碼傳給運行中程序的唯一方式。
新的類文件通過類加載機制載入虛擬機,從而把新類型提供給解釋器執(zhí)行。
三、Object 的重要方法
所有類都直接或間接擴展 java.lang.Object 類。這個類定義了很多有用的方法,而且你可以根據(jù)需求來重寫這些方法。
1 、 toString 方法
toString 方法的作用是返回對象的文本表示形式。連接字符串或使用 System.out.println 等方法時,會自動在對象上調(diào)用這個方法。給對象提供文本表示形式,十分利于調(diào)試或記錄日志,而且精心編寫的 toString 方法還能給報告生成等任務提供幫助。
Object 類中的 toString 方法返回的字符串由對象所屬的類名和對象的十六進制形式哈希碼 ( 由 hashCode 方法計算得到,本章節(jié)稍后會介紹 ) 組成。這個默認的實現(xiàn)方式提供了對象的類型和標識兩個基本信息,但一般并沒什么用。
2 、 equals 方法
== 運算符測試兩個引用是否指向同一個對象 ( 比較兩個內(nèi)存單元的內(nèi)容是否一樣 ) 。如果要測試兩個不同的對象是否相等,必須使用 equals 方法。任何類都能覆蓋 equals 方法,定義專用的相等比較方式。 Object.equals 方法直接使用 == 運算符,只有兩個對象是同一個對象時,才判定二者相等。
很多類以及自定義類的equals 方法都需要重寫,是需要根據(jù)場景與需求來定制的。 JDK 自帶的許多類往往都是:
對比一些簡單的屬性值
再對比復雜的屬性值or 對比業(yè)務上最快能區(qū)分對象的值
再對比其他的值or 對比地址、長度
主要為了將那些不匹配的情況盡快排除
3 、 hashCode 方法
Java 中的 hashCode 方法就是根據(jù)一定的規(guī)則將與對象相關的信息 ( 比如對象的存儲地址,對象的字段等 ) 映射成一個數(shù)值,這個數(shù)值稱作為散列值。如果集合中已經(jīng)存在一萬條數(shù)據(jù)或者更多的數(shù)據(jù),如果采用 equals 方法去逐一比較,效率必然是一個問題。
此時hashCode 方法的作用就體現(xiàn)出來了,當集合要添加新的對象時,先調(diào)用這個對象的 hashCode 方法,得到對應的 hashcode 值,實際上在 HashMap 的具體實現(xiàn)中會用一個 table 保存已經(jīng)存進去的對象的 hashcode 值,如果 table 中沒有該 hashcode 值,它就可以直接存進去,不用再進行任何比較了 ;
如果存在該hashcode 值,就調(diào)用它的 equals 方法與新元素進行比較,相同的話就不存了,不相同就散列其它的地址,所以這里存在一個沖突解決的問題,這樣一來實際調(diào)用 equals 方法的次數(shù)就大大降低了。
另外注意,默認的hashCode 會發(fā)起 native 調(diào)用,如果用 hashCode 對兩個對象對比,會導致開銷增大。
hashcode 方法的作用:
只要覆蓋了 equals 方法,就必須覆蓋 hashCode 方法。 hashCode 方法返回一個整數(shù),用于哈希表數(shù)據(jù)結(jié)構(gòu)。如果兩個對象經(jīng) equals 方法測試是相等的,它們就要具有相同的哈希碼。
不相等的對象要具有不相等的哈希碼( 為了哈希表的操作效率 ) ,這一點很重要,但不是強制要求,最低要求是不相等的對象不能共用一個哈希碼。為了滿足最低要求, hashCode 方法要使用稍微復雜的算法或位操作。
Object.hashCode 方法和 Object.equals 方法協(xié)同工作,返回對象的哈希碼。這個哈希碼基于對象的身份生成,而不是對象的相等性。 ( 如果需要使用基于身份的哈希碼,可以通過靜態(tài)方法 System.identityHashCode 獲取 Object.hashCode 方法的返回值。 )
4 、 hashCode 和 equal 方法
hashCode 的存在主要是用于查找的快捷性,如 Hashtable , HashMap 等, hashCode 是用來在散列存儲結(jié)構(gòu)中確定對象的存儲地址的 ;
如果兩個對象相同,就是適用于equals(java.lang.Object) 方法,那么這兩個對象的 hashCode 一定要相同 ;
如果對象的equals 方法被重寫,那么對象的 hashCode 也盡量重寫,并且產(chǎn)生 hashCode 使用的對象,一定要和 equals 方法中使用的一致,否則就會違反上面提到的第 2 點 ;
兩個對象的hashCode 相同,并不一定表示兩個對象就相同,也就是不一定適用于 equals(java.lang.Object) 方法,只能夠說明這兩個對象在散列存儲結(jié)構(gòu)中,如 Hashtable ,他們 " 存放在同一個籃子里 " 。
5 、 Comparable::compareTo 方法
如果一個類實現(xiàn)了 Comparable 接口,就可以比較一個實例是小于、大于還是等于另一個實例。這也表明,實現(xiàn) Comparable 接口的類可以排序。
因為 compareTo 方法不在 Object 類中聲明,所以由每個類自行決定實例能否排序。如果能排序就定義 compareTo 方法,實現(xiàn)實例排序的方式。
compareTo 方法返回一個 int 類型的值,這個值需要進一步說明。如果當前對象 (this) 小于傳入的對象, compareTo 方法應該返回一個負數(shù) ; 如果兩個對象相等,應該返回 0; 如果當前對象大于傳入的對象,應該返回一個正數(shù)。
6 、 clone 方法
Object 類定義了一個名為 clone 的方法,這個方法的作用是返回一個對象,并把這個對象的字段設為和當前對象一樣。 clone 方法不常用,原因有兩個。
其一,只有類實現(xiàn)了 java.lang.Cloneable 接口,這個方法才有用。 Cloneable 接口沒有定義任何方法 ( 是個標記接口 ) ,因此若想實現(xiàn)這個接口,只需在類簽名的 implements 子句中列出這個接口即可。
其二,clone 方法聲明為 protected ,因此,如果想讓其他類復制你的對象,你的類必須實現(xiàn) Cloneable 接口,并覆蓋 clone 方法,而且要把 clone 方法聲明為 public 。
clone 方法很難正確實現(xiàn),而副本構(gòu)造方法實現(xiàn)起來更容易也更安全 ;
7 、 finalize 方法
一種古老的資源管理技術(shù)叫終結(jié)(finalization) ,開發(fā)者應該知道有這么一種技術(shù)。然而,這種技術(shù)幾乎完全廢棄了,任何情況下,大多數(shù) Java 開發(fā)者都不應該直接使用。
只有少數(shù)應用場景適合使用終結(jié),而且只有少數(shù) Java 開發(fā)者會遇到這種場景。如果有任何疑問,就不要使用終結(jié),處理資源的 try 語句往往是正確的替代品。
終結(jié)機制的作用是自動釋放不再使用的資源。垃圾回收自動釋放的是對象使用的內(nèi)存資源,不過對象可能會保存其他類型的資源,例如打開的文件和網(wǎng)絡連接。垃圾回收程序不會為你釋放這些額外的資源,因此,終結(jié)機制的作用是讓開發(fā)者執(zhí)行清理任務,例如關閉文件、中斷網(wǎng)絡連接、刪除臨時文件,等等。
終結(jié)機制的工作方式是這樣的:如果對象有 finalize 方法 ( 一般叫作終結(jié)方法 ) ,那么不再使用這個對象 ( 或?qū)ο蟛豢蛇_ ) 后的某個時間會調(diào)用這個方法,但要在垃圾回收程序回收分配給這個對象的空間之前調(diào)用。終結(jié)方法用于清理對象使用的資源。
另外注意,這是一個實例方法。而在類上,沒有等效的機制。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。