成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

好程序員Java培訓(xùn)分享零基礎(chǔ)快速入門(mén)Java

 好程序員Java 培訓(xùn)分享零基礎(chǔ)快速入門(mén) Java, 學(xué)習(xí) Java ,掌握一些基本的概念是第一步,本文簡(jiǎn)單為大家介紹一些入門(mén)級(jí)的內(nèi)容,希望幫助零基礎(chǔ)小白快速入門(mén)。

創(chuàng)新互聯(lián)公司主營(yíng)黟縣網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP開(kāi)發(fā),黟縣h5成都小程序開(kāi)發(fā)搭建,黟縣網(wǎng)站營(yíng)銷(xiāo)推廣歡迎黟縣等地區(qū)企業(yè)咨詢(xún)

 一、基本概念

 JVM : java 虛擬機(jī),負(fù)責(zé)將編譯產(chǎn)生的字節(jié)碼轉(zhuǎn)換為特定機(jī)器代碼,實(shí)現(xiàn)一次編譯多處執(zhí)行 ;

 JRE : java 運(yùn)行時(shí)環(huán)境,包含了 java 虛擬機(jī) jvm , java 基礎(chǔ)類(lèi)庫(kù)。是使用 java 語(yǔ)言編寫(xiě)的程序運(yùn)行所需要的軟件環(huán)境 ;

 JDK : java 開(kāi)發(fā)工具包,是編寫(xiě) java 程序所需的開(kāi)發(fā)工具。 JDK 包含了 JRE ,同時(shí)還包含了編譯器 javac ,調(diào)試和分析工具, JavaDoc 。

 二、Java 是如何編譯和執(zhí)行的 ?

 上圖表示了Java 代碼是怎么編譯和加載的。整個(gè)流程從 Java 源碼開(kāi)始,經(jīng)過(guò) javac 程序處理后得到類(lèi)文件,這個(gè)文件中保存的是編譯源碼后得到的 Java 字節(jié)碼。類(lèi)文件是 Java 平臺(tái)能處理的最小功能單位,也是把新代碼傳給運(yùn)行中程序的唯一方式。

 新的類(lèi)文件通過(guò)類(lèi)加載機(jī)制載入虛擬機(jī),從而把新類(lèi)型提供給解釋器執(zhí)行。

 三、Object 的重要方法

 所有類(lèi)都直接或間接擴(kuò)展 java.lang.Object 類(lèi)。這個(gè)類(lèi)定義了很多有用的方法,而且你可以根據(jù)需求來(lái)重寫(xiě)這些方法。

 1 、 toString 方法

 toString 方法的作用是返回對(duì)象的文本表示形式。連接字符串或使用 System.out.println 等方法時(shí),會(huì)自動(dòng)在對(duì)象上調(diào)用這個(gè)方法。給對(duì)象提供文本表示形式,十分利于調(diào)試或記錄日志,而且精心編寫(xiě)的 toString 方法還能給報(bào)告生成等任務(wù)提供幫助。

 Object 類(lèi)中的 toString 方法返回的字符串由對(duì)象所屬的類(lèi)名和對(duì)象的十六進(jìn)制形式哈希碼 ( 由 hashCode 方法計(jì)算得到,本章節(jié)稍后會(huì)介紹 ) 組成。這個(gè)默認(rèn)的實(shí)現(xiàn)方式提供了對(duì)象的類(lèi)型和標(biāo)識(shí)兩個(gè)基本信息,但一般并沒(méi)什么用。

 2 、 equals 方法

 == 運(yùn)算符測(cè)試兩個(gè)引用是否指向同一個(gè)對(duì)象 ( 比較兩個(gè)內(nèi)存單元的內(nèi)容是否一樣 ) 。如果要測(cè)試兩個(gè)不同的對(duì)象是否相等,必須使用 equals 方法。任何類(lèi)都能覆蓋 equals 方法,定義專(zhuān)用的相等比較方式。 Object.equals 方法直接使用 == 運(yùn)算符,只有兩個(gè)對(duì)象是同一個(gè)對(duì)象時(shí),才判定二者相等。

 很多類(lèi)以及自定義類(lèi)的equals 方法都需要重寫(xiě),是需要根據(jù)場(chǎng)景與需求來(lái)定制的。 JDK 自帶的許多類(lèi)往往都是:

 對(duì)比一些簡(jiǎn)單的屬性值

 再對(duì)比復(fù)雜的屬性值or 對(duì)比業(yè)務(wù)上最快能區(qū)分對(duì)象的值

 再對(duì)比其他的值or 對(duì)比地址、長(zhǎng)度

 主要為了將那些不匹配的情況盡快排除

 3 、 hashCode 方法

 Java 中的 hashCode 方法就是根據(jù)一定的規(guī)則將與對(duì)象相關(guān)的信息 ( 比如對(duì)象的存儲(chǔ)地址,對(duì)象的字段等 ) 映射成一個(gè)數(shù)值,這個(gè)數(shù)值稱(chēng)作為散列值。如果集合中已經(jīng)存在一萬(wàn)條數(shù)據(jù)或者更多的數(shù)據(jù),如果采用 equals 方法去逐一比較,效率必然是一個(gè)問(wèn)題。

 此時(shí)hashCode 方法的作用就體現(xiàn)出來(lái)了,當(dāng)集合要添加新的對(duì)象時(shí),先調(diào)用這個(gè)對(duì)象的 hashCode 方法,得到對(duì)應(yīng)的 hashcode 值,實(shí)際上在 HashMap 的具體實(shí)現(xiàn)中會(huì)用一個(gè) table 保存已經(jīng)存進(jìn)去的對(duì)象的 hashcode 值,如果 table 中沒(méi)有該 hashcode 值,它就可以直接存進(jìn)去,不用再進(jìn)行任何比較了 ;

 如果存在該hashcode 值,就調(diào)用它的 equals 方法與新元素進(jìn)行比較,相同的話就不存了,不相同就散列其它的地址,所以這里存在一個(gè)沖突解決的問(wèn)題,這樣一來(lái)實(shí)際調(diào)用 equals 方法的次數(shù)就大大降低了。

 另外注意,默認(rèn)的hashCode 會(huì)發(fā)起 native 調(diào)用,如果用 hashCode 對(duì)兩個(gè)對(duì)象對(duì)比,會(huì)導(dǎo)致開(kāi)銷(xiāo)增大。

 hashcode 方法的作用:

 只要覆蓋了 equals 方法,就必須覆蓋 hashCode 方法。 hashCode 方法返回一個(gè)整數(shù),用于哈希表數(shù)據(jù)結(jié)構(gòu)。如果兩個(gè)對(duì)象經(jīng) equals 方法測(cè)試是相等的,它們就要具有相同的哈希碼。

 不相等的對(duì)象要具有不相等的哈希碼( 為了哈希表的操作效率 ) ,這一點(diǎn)很重要,但不是強(qiáng)制要求,最低要求是不相等的對(duì)象不能共用一個(gè)哈希碼。為了滿足最低要求, hashCode 方法要使用稍微復(fù)雜的算法或位操作。

 Object.hashCode 方法和 Object.equals 方法協(xié)同工作,返回對(duì)象的哈希碼。這個(gè)哈希碼基于對(duì)象的身份生成,而不是對(duì)象的相等性。 ( 如果需要使用基于身份的哈希碼,可以通過(guò)靜態(tài)方法 System.identityHashCode 獲取 Object.hashCode 方法的返回值。 )

 4 、 hashCode 和 equal 方法

 hashCode 的存在主要是用于查找的快捷性,如 Hashtable , HashMap 等, hashCode 是用來(lái)在散列存儲(chǔ)結(jié)構(gòu)中確定對(duì)象的存儲(chǔ)地址的 ;

 如果兩個(gè)對(duì)象相同,就是適用于equals(java.lang.Object) 方法,那么這兩個(gè)對(duì)象的 hashCode 一定要相同 ;

 如果對(duì)象的equals 方法被重寫(xiě),那么對(duì)象的 hashCode 也盡量重寫(xiě),并且產(chǎn)生 hashCode 使用的對(duì)象,一定要和 equals 方法中使用的一致,否則就會(huì)違反上面提到的第 2 點(diǎn) ;

 兩個(gè)對(duì)象的hashCode 相同,并不一定表示兩個(gè)對(duì)象就相同,也就是不一定適用于 equals(java.lang.Object) 方法,只能夠說(shuō)明這兩個(gè)對(duì)象在散列存儲(chǔ)結(jié)構(gòu)中,如 Hashtable ,他們 " 存放在同一個(gè)籃子里 " 。

 5 、 Comparable::compareTo 方法

 如果一個(gè)類(lèi)實(shí)現(xiàn)了 Comparable 接口,就可以比較一個(gè)實(shí)例是小于、大于還是等于另一個(gè)實(shí)例。這也表明,實(shí)現(xiàn) Comparable 接口的類(lèi)可以排序。

 因?yàn)?compareTo 方法不在 Object 類(lèi)中聲明,所以由每個(gè)類(lèi)自行決定實(shí)例能否排序。如果能排序就定義 compareTo 方法,實(shí)現(xiàn)實(shí)例排序的方式。

 compareTo 方法返回一個(gè) int 類(lèi)型的值,這個(gè)值需要進(jìn)一步說(shuō)明。如果當(dāng)前對(duì)象 (this) 小于傳入的對(duì)象, compareTo 方法應(yīng)該返回一個(gè)負(fù)數(shù) ; 如果兩個(gè)對(duì)象相等,應(yīng)該返回 0; 如果當(dāng)前對(duì)象大于傳入的對(duì)象,應(yīng)該返回一個(gè)正數(shù)。

 6 、 clone 方法

 Object 類(lèi)定義了一個(gè)名為 clone 的方法,這個(gè)方法的作用是返回一個(gè)對(duì)象,并把這個(gè)對(duì)象的字段設(shè)為和當(dāng)前對(duì)象一樣。 clone 方法不常用,原因有兩個(gè)。

 其一,只有類(lèi)實(shí)現(xiàn)了 java.lang.Cloneable 接口,這個(gè)方法才有用。 Cloneable 接口沒(méi)有定義任何方法 ( 是個(gè)標(biāo)記接口 ) ,因此若想實(shí)現(xiàn)這個(gè)接口,只需在類(lèi)簽名的 implements 子句中列出這個(gè)接口即可。

 其二,clone 方法聲明為 protected ,因此,如果想讓其他類(lèi)復(fù)制你的對(duì)象,你的類(lèi)必須實(shí)現(xiàn) Cloneable 接口,并覆蓋 clone 方法,而且要把 clone 方法聲明為 public 。

 clone 方法很難正確實(shí)現(xiàn),而副本構(gòu)造方法實(shí)現(xiàn)起來(lái)更容易也更安全 ;

 7 、 finalize 方法

 一種古老的資源管理技術(shù)叫終結(jié)(finalization) ,開(kāi)發(fā)者應(yīng)該知道有這么一種技術(shù)。然而,這種技術(shù)幾乎完全廢棄了,任何情況下,大多數(shù) Java 開(kāi)發(fā)者都不應(yīng)該直接使用。

 只有少數(shù)應(yīng)用場(chǎng)景適合使用終結(jié),而且只有少數(shù) Java 開(kāi)發(fā)者會(huì)遇到這種場(chǎng)景。如果有任何疑問(wèn),就不要使用終結(jié),處理資源的 try 語(yǔ)句往往是正確的替代品。

 終結(jié)機(jī)制的作用是自動(dòng)釋放不再使用的資源。垃圾回收自動(dòng)釋放的是對(duì)象使用的內(nèi)存資源,不過(guò)對(duì)象可能會(huì)保存其他類(lèi)型的資源,例如打開(kāi)的文件和網(wǎng)絡(luò)連接。垃圾回收程序不會(huì)為你釋放這些額外的資源,因此,終結(jié)機(jī)制的作用是讓開(kāi)發(fā)者執(zhí)行清理任務(wù),例如關(guān)閉文件、中斷網(wǎng)絡(luò)連接、刪除臨時(shí)文件,等等。

 終結(jié)機(jī)制的工作方式是這樣的:如果對(duì)象有 finalize 方法 ( 一般叫作終結(jié)方法 ) ,那么不再使用這個(gè)對(duì)象 ( 或?qū)ο蟛豢蛇_(dá) ) 后的某個(gè)時(shí)間會(huì)調(diào)用這個(gè)方法,但要在垃圾回收程序回收分配給這個(gè)對(duì)象的空間之前調(diào)用。終結(jié)方法用于清理對(duì)象使用的資源。

 另外注意,這是一個(gè)實(shí)例方法。而在類(lèi)上,沒(méi)有等效的機(jī)制。

分享標(biāo)題:好程序員Java培訓(xùn)分享零基礎(chǔ)快速入門(mén)Java
標(biāo)題網(wǎng)址:http://jinyejixie.com/article38/jjhhsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、服務(wù)器托管、自適應(yīng)網(wǎng)站、商城網(wǎng)站、Google、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司
怀来县| 昆明市| 罗甸县| 余姚市| 孟州市| 四会市| 永和县| 大埔县| 依安县| 花垣县| 梨树县| 绵竹市| 盐山县| 抚松县| 十堰市| 宕昌县| 娄烦县| 双鸭山市| 福贡县| 新兴县| 游戏| 平安县| 临夏县| 延安市| 漾濞| 兴义市| 萨嘎县| 东丽区| 万源市| 宜黄县| 临猗县| 迭部县| 江津市| 武乡县| 宜阳县| 奇台县| 双峰县| 洛浦县| 阜城县| 新民市| 绥芬河市|