java中 2017 1等于_java 2017秋招1
1 GC是什么?為什么要有GC?
GC是垃圾收集的意思,內(nèi)存處理是編程人員容易出現(xiàn)問題的地方,忘記或者錯(cuò)誤的內(nèi)存回收會(huì)導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能可以自動(dòng)監(jiān)測(cè)對(duì)象是否超過作用域從而達(dá)到自動(dòng)回收內(nèi)存的目的,Java語言沒有提供釋放已分配內(nèi)存的顯示操作方法。
Java程序員不用擔(dān)心內(nèi)存管理,因?yàn)槔占鲿?huì)自動(dòng)進(jìn)行管理。
要請(qǐng)求垃圾收集,可以調(diào)用下面的方法之一:System.gc()或Runtime.getRuntime().gc(),但JVM可以屏蔽掉顯示的垃圾回收調(diào)用。
垃圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。垃圾回收器通常是作為一個(gè)單獨(dú)的低優(yōu)先級(jí)的線程運(yùn)行,不可預(yù)知的情況下對(duì)內(nèi)存堆中已經(jīng)死亡的或者長(zhǎng)時(shí)間沒有使用的對(duì)象進(jìn)行清除和回收,程序員不能實(shí)時(shí)的調(diào)用垃圾回收器對(duì)某個(gè)對(duì)象或所有對(duì)象進(jìn)行垃圾回收。
在Java誕生初期,垃圾回收是Java最大的亮點(diǎn)之一,因?yàn)榉?wù)器端的編程需要有效的防止內(nèi)存泄露問題,然而時(shí)過境遷,如今Java的垃圾回收機(jī)制已經(jīng)成為被詬病的東西。移動(dòng)智能終端用戶通常覺得iOS的系統(tǒng)比Android系統(tǒng)有更好的用戶體驗(yàn),其中一個(gè)深層次的原因就在于android系統(tǒng)中垃圾回收的不可預(yù)知性。
2 簡(jiǎn)述final,finalize,finally的區(qū)別?
final:可以作為修飾符修飾變量、方法和類,被final修飾的變量只能一次賦值;被final修飾的方法不能夠在子類中被重寫(override);被final修飾的類不能夠被繼承。
finally用在異常處理中定義總是執(zhí)行代碼,無論try塊中的代碼是否引發(fā)異常,catch是否匹配成功,finally塊中的代碼總是被執(zhí)行,除非JVM被關(guān)閉(System.exit(1)),通常用作釋放外部資源(不會(huì)被垃圾回收器回收的資源)。
finalize()方法是Object類中定義的方法,當(dāng)垃圾回收器將無用對(duì)象從內(nèi)存中清除時(shí),該對(duì)象的finalize()方法被調(diào)用。由于該方法是protected方法,子類可以通過重寫(override)該方法以整理資源或者執(zhí)行其他的清理工作。
3 Abstract class和interface有什么區(qū)別?
Java語言中,abstract class和interface是支持抽象類定義的兩種機(jī)制。正是由于這兩種機(jī)制的存在,才賦予了Java強(qiáng)大的面向?qū)ο竽芰Αbstract class和interface之間在對(duì)于抽象類定義的支持方面具有很大的相似性,甚至可以相互替換;其實(shí),兩者之間還是有很大的區(qū)別的,有時(shí)對(duì)于它們的選擇甚至反映出對(duì)于問題領(lǐng)域本質(zhì)的理解、對(duì)于設(shè)計(jì)意圖的理解是否正確、合理。
Abstract class
Interface
實(shí)例化
不能
不能
類
一種繼承關(guān)系,一個(gè)類只能使用一次繼承關(guān)系。可以通過繼承多個(gè)接口實(shí)現(xiàn)多重繼承
一個(gè)類可以實(shí)現(xiàn)多個(gè)interface
數(shù)據(jù)成員
可有自己的
靜態(tài)的不能被修改即必須是static final,一般不在此定義
方法
可以私有的,非abstract方法,必須實(shí)現(xiàn)
不可有私有的,默認(rèn)是public,abstract 類型
變量
可有私有的,默認(rèn)是friendly 型,其值可以在子類中重新定義,也可以重新賦值
不可有私有的,默認(rèn)是public static final 型,且必須給其初值,實(shí)現(xiàn)類中不能重新定義,不能改變其值。
設(shè)計(jì)理念
表示的是“is-a”關(guān)系
表示的是“l(fā)ike-a”關(guān)系
實(shí)現(xiàn)
需要繼承,要用extends
要用implements
abstract class和interface在Java語言中都是用來進(jìn)行抽象類(本文中的抽象類并非從abstract class翻譯而來,它表示的是一個(gè)抽象體,而abstract class為Java語言中用于定義抽象類的一種方法)定義的,那么什么是抽象類,使用抽象類能為我們帶來什么好處呢?
聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstract class),它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽象類,并讓它指向具體子類的一個(gè)實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實(shí)現(xiàn),否則它們也是抽象類為。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實(shí)現(xiàn) 這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個(gè)有程序體。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。 然后,它可以在實(shí)現(xiàn)了該接口的類的任何對(duì)象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到 接口類型或從接口類型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來決定某對(duì)象的類是否實(shí)現(xiàn)了接口。
接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類是可以繼承實(shí)體類,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)。接口更關(guān)注“能實(shí)現(xiàn)什么功能”,而不管“怎么實(shí)現(xiàn)的”。
相同點(diǎn)
兩者都是抽象類,都不能實(shí)例化。
interface實(shí)現(xiàn)類及abstrct class的子類都必須要實(shí)現(xiàn)已經(jīng)聲明的抽象方法。
不同點(diǎn)
interface需要實(shí)現(xiàn),要用implements,而abstract class需要繼承,要用extends。
一個(gè)類可以實(shí)現(xiàn)多個(gè)interface,但一個(gè)類只能繼承一個(gè)abstract class。
interface強(qiáng)調(diào)特定功能的實(shí)現(xiàn),而abstract class強(qiáng)調(diào)所屬關(guān)系。
盡管interface實(shí)現(xiàn)類及abstrct class的子類都必須要實(shí)現(xiàn)相應(yīng)的抽象方法,但實(shí)現(xiàn)的形式不同。interface中的每一個(gè)方法都是抽象方法,都只是聲明的 (declaration, 沒有方法體),實(shí)現(xiàn)類必須要實(shí)現(xiàn)。而abstract class的子類可以有選擇地實(shí)現(xiàn)。這個(gè)選擇有兩點(diǎn)含義:
Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子類必須實(shí)現(xiàn)。那些沒有abstract的方法,在Abstrct class中必須定義方法體。
abstract class的子類在繼承它時(shí),對(duì)非抽象方法既可以直接繼承,也可以覆蓋;而對(duì)抽象方法,可以選擇實(shí)現(xiàn),也可以通過再次聲明其方法為抽象的方式,無需實(shí)現(xiàn),留給其子類來實(shí)現(xiàn),但此類必須也聲明為抽象類。既是抽象類,當(dāng)然也不能實(shí)例化。
abstract class是interface與Class的中介
interface是完全抽象的,只能聲明方法,而且只能聲明pulic的方法,不能聲明private及protected的方法,不能定義方法體,也 不能聲明實(shí)例變量。然而,interface卻可以聲明常量變量,并且在JDK中不難找出這種例子。但將常量變量放在interface中違背了其作為接 口的作用而存在的宗旨,也混淆了interface與類的不同價(jià)值。如果的確需要,可以將其放在相應(yīng)的abstract class或Class中。
abstract class在interface及Class中起到了承上啟下的作用。一方面,abstract class是抽象的,可以聲明抽象方法,以規(guī)范子類必須實(shí)現(xiàn)的功能;另一方面,它又可以定義缺省的方法體,供子類直接使用或覆蓋。另外,它還可以定義自己 的實(shí)例變量,以供子類通過繼承來使用
interface的應(yīng)用場(chǎng)合:
類與類之前需要特定的接口進(jìn)行協(xié)調(diào),而不在乎其如何實(shí)現(xiàn)。
作為能夠?qū)崿F(xiàn)特定功能的標(biāo)識(shí)存在,也可以是什么接口方法都沒有的純粹標(biāo)識(shí)
需要將一組類視為單一的類,而調(diào)用者只通過接口來與這組類發(fā)生聯(lián)系
需要實(shí)現(xiàn)特定的多項(xiàng)功能,而這些功能之間可能完全沒有任何聯(lián)系
abstract class的應(yīng)用場(chǎng)合:
一句話,在既需要統(tǒng)一的接口,又需要實(shí)例變量或缺省的方法的情況下,就可以使用它。最常見的有:
定義了一組接口,但又不想強(qiáng)迫每個(gè)實(shí)現(xiàn)類都必須實(shí)現(xiàn)所有的接口。可以用abstract class定義一組方法體,甚至可以是空方法體,然后由子類選擇自己所感興趣的方法來覆蓋
某些場(chǎng)合下,只靠純粹的接口不能滿足類與類之間的協(xié)調(diào),還必需類中表示狀態(tài)的變量來區(qū)別不同的關(guān)系。abstract的中介作用可以很好地滿足這一點(diǎn)
規(guī)范了一組相互協(xié)調(diào)的方法,其中一些方法是共同的,與狀態(tài)無關(guān)的,可以共享的,無需子類分別實(shí)現(xiàn);而另一些方法卻需要各個(gè)子類根據(jù)自己特定的狀態(tài)來實(shí)現(xiàn)特定的功能
4 Java內(nèi)存管理
(1)請(qǐng)描述java的內(nèi)存管理原理
(2)請(qǐng)描述java的內(nèi)存分區(qū)
(3)請(qǐng)描述java的對(duì)象生命周期,以及對(duì)象的訪問?
暫時(shí)參考:
Java內(nèi)存管理原理及內(nèi)存區(qū)域詳解
總結(jié)
以上是生活随笔為你收集整理的java中 2017 1等于_java 2017秋招1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贷款欠条怎么写
- 下一篇: 华为鸿蒙有望下月规模化推送 众多网友纷