黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 42道最新java開發(fā)常見面試題:JavaSE基礎(chǔ)知識(shí)

42道最新java開發(fā)常見面試題:JavaSE基礎(chǔ)知識(shí)

更新時(shí)間:2019-08-07 15:14:15 來源:動(dòng)力節(jié)點(diǎn) 瀏覽7552次


 

  1、JVM、JRE和JDK的區(qū)別?


  JVM(Java Virtual Machine):java虛擬機(jī),用于保證java的跨平臺(tái)的特性。 java語言是跨平臺(tái),jvm不是跨平臺(tái)的。


  JRE(Java Runtime Environment):java的運(yùn)行環(huán)境,包括jvm+java的核心類庫。


  JDK(Java Development Kit):java的開發(fā)工具,包括jre+開發(fā)工具



  2、環(huán)境變量path和classpath的作用是什么?


  path是配置Windows可執(zhí)行文件的搜索路徑,即擴(kuò)展名為.exe的程序文件所在的目錄,


  用于指定DOS窗口命令的路徑。


  Classpath是配置class文件所在的目錄,用于指定類搜索路徑,JVM就是通過它來尋找該類的class類文件的。



  3、Java語言的特性?


  跨平臺(tái)性、面向?qū)ο蟆踩浴⒍嗑€程、簡單易用。



  4、變量有什么用?為什么要定義變量?什么時(shí)候用?


  變量的作用:用來存儲(chǔ)數(shù)據(jù)。


  為什么要定義變量:用來不斷的存放同一類型的常量,并可以重復(fù)使用



  5、& 和 && 的區(qū)別?


  &運(yùn)算符有兩種用法: (1)按位與; (2)邏輯與。


  &&運(yùn)算符是短路與運(yùn)算。


  &&會(huì)出現(xiàn)短路,如果可以通過第一個(gè)表達(dá)式判斷出整個(gè)表達(dá)式的結(jié)果,則不繼續(xù)后面表達(dá)式的運(yùn)算;只能操作boolean類型數(shù)據(jù)


  詳細(xì)介紹:折疊


  &&之所以稱為短路運(yùn)算是因?yàn)椋绻?amp;&左邊的表達(dá)式的值是 false,右邊的表達(dá)式會(huì)被直接短路掉,不會(huì)進(jìn)行運(yùn)算。


  很多時(shí)候我們可能都需要用&&而不是&,例如在驗(yàn)證用戶登錄時(shí)判定用戶名不是 null 而且不是空字符串,應(yīng)當(dāng)寫為 username != null &&!username.equals(""),二者的順序不能交換,更不能用&運(yùn)算符,因?yàn)榈谝粋€(gè)條件如果不成立,根本不能進(jìn)行字符串的 equals 比較,否則會(huì)產(chǎn)生 NullPointerException 異常。


  注意:邏輯或運(yùn)算符(|)和短路或運(yùn)算符(||)的差別也是如此。



  6、數(shù)據(jù)類型


  (1)基本數(shù)據(jù)類型(4類8種)(字節(jié)數(shù)){數(shù)據(jù)表示范圍}


  整數(shù)類型:byte(1)、short(2)、int(4)、long(8)


  字符類型:char(2)


  布爾類型:boolean(1)(ture false)


  浮點(diǎn)數(shù)類型:float(4)、double(8)


  (2)引用數(shù)據(jù)類型:類、接口、數(shù)組


  (3)數(shù)據(jù)類型表


1.png



  7、類型轉(zhuǎn)換


  (1)精度從高到低 double float long int short(char) byte


  自動(dòng)類型轉(zhuǎn)換 將一個(gè)低精度 → 高精度


  強(qiáng)制類型轉(zhuǎn)換 將一個(gè)高精度 → 低精度(精度會(huì)下降)



  8、String是最基本的數(shù)據(jù)類型嗎?


  基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short。取值范圍是 -2^(字節(jié)數(shù)*8-1) ~ -2^(字節(jié)數(shù)*8-1) - 1,但Boolean是4個(gè)字節(jié),而boolean數(shù)組1個(gè)字節(jié),這是因?yàn)樘摂M機(jī)用int來代替boolean,保證高效存取。而java.lang.String類是final類型的,因此不能繼承也不能修改String類。String還重寫了hashCode和equals方法。



  9、數(shù)組和String有l(wèi)ength()方法嗎?


  數(shù)組沒有l(wèi)ength()這個(gè)方法,有g(shù)etLength()方法,但有l(wèi)ength的屬性。String有l(wèi)ength()方法



  10、是否可以繼承String?


  String 類是 final 類,不可以被繼承。


  繼承 String 本身就是一個(gè)錯(cuò)誤的行為,對 String 類型最好的重用方式是關(guān)聯(lián)關(guān)系(Has-A)和依賴關(guān)系(UseA)而不是繼承關(guān)系(Is-A)



  11、new一個(gè)字符串“xyz”創(chuàng)建了幾個(gè)對象?


  兩個(gè)或一個(gè),new一個(gè)字符串會(huì)產(chǎn)生兩個(gè)對象,一個(gè)在堆上,一個(gè)在常量池中,堆上的數(shù)據(jù)每new一次產(chǎn)生一個(gè)新的對象,如果常量池中有需要的對象,就不會(huì)創(chuàng)建新的對象,直接拿來用,所以一共創(chuàng)建了一個(gè)對象,若常量池中沒有要用的對象,則會(huì)創(chuàng)建一個(gè),所以一共創(chuàng)建了兩個(gè)對象。



  12、float f=3.4;是否正確?


  不正確。3.4是雙精度數(shù),將雙精度型(double)賦值給浮點(diǎn)型(float)屬于下轉(zhuǎn)型(down-casting,也稱為窄化)會(huì)造成精度損失,因此需要強(qiáng)制類型轉(zhuǎn)換float f =(float)3.4; 或者寫成float f =3.4F。



  13、int和Integer有什么區(qū)別?


  int是java的原始數(shù)據(jù)類型,Integer是java為int提供的封裝類。Integer實(shí)例變量的缺省值為 null,而int實(shí)例變量的缺省值與它們的類型有關(guān)。int與Integer之間可以進(jìn)行自動(dòng)拆裝箱的轉(zhuǎn)換,但I(xiàn)nteger的取值范圍是-128-127,若超過這個(gè)范圍,就new一個(gè)新的對象返回(Valueof方法)



  14、“==”和equals方法的區(qū)別?


  == 和 equals 最大的區(qū)別是一個(gè)是運(yùn)算符 一個(gè)是方法 。


  ==:如果比較的對象是基本數(shù)據(jù)類型,則比較的是數(shù)值是否相等;如果比較的是引用數(shù)據(jù)類型,則比較的是對象的地址值是否相等。


  equals():用來比較方法兩個(gè)對象的內(nèi)容是否相等,字符串的比較常用equals方法。


  注意: equals方法不能比較基本數(shù)據(jù)類型,如果沒有對 equals 方法進(jìn)行重寫,則比較的是引用類型的變量所指向的對象的地址。如果一個(gè)類沒有自己定義equals方法,那么它將繼承Object類的equals方法(使用==操作符)



  15、函數(shù)的定義、特點(diǎn)、兩個(gè)明確


  (1)定義:函數(shù)就是定義在類中的具有特定功能的一段獨(dú)立小程序。


  (2)特點(diǎn):


  定義函數(shù)可以將功能代碼進(jìn)行封裝,便于對該功能進(jìn)行復(fù)用


  函數(shù)只有被調(diào)用才會(huì)被執(zhí)行


  函數(shù)的出現(xiàn)提高了代碼的復(fù)用性


  對于函數(shù)沒有具體返回值的情況,返回值類型用關(guān)鍵字void表示,那么該函數(shù)中的return語句如果在最后一行可以省略不寫。


  (3)兩個(gè)明確


  明確要定義的功能最后的結(jié)果是什么?


  明確在定義該功能的過程中,是否需要未知內(nèi)容參與運(yùn)算



  16、重載:


  概念:在同一個(gè)類中,允許存在一個(gè)以上的同名函數(shù),只要它們的參數(shù)個(gè)數(shù)或者參數(shù)類型不同即可。


  特點(diǎn):與返回值類型無關(guān),只看參數(shù)列表(參數(shù)類型以及參數(shù)個(gè)數(shù))。


  好處:方便于閱讀,優(yōu)化了程序設(shè)計(jì)。



  17、數(shù)組:


  概念:同一種數(shù)據(jù)類型的集合。


  好處:可以自動(dòng)給數(shù)組中的元素從0開始編號(hào),方便操作這些元素。



  18、內(nèi)存結(jié)構(gòu):


  棧內(nèi)存:用于存儲(chǔ)局部變量,當(dāng)數(shù)據(jù)使用完,所占空間會(huì)自動(dòng)釋放。


  堆內(nèi)存:數(shù)組和對象,通過new建立的實(shí)例都存放在堆內(nèi)存中。


  方法區(qū):靜態(tài)成員、構(gòu)造函數(shù)、常量池、線程池


  本地方法區(qū):window系統(tǒng)占用



  19、面向?qū)ο蟮母攀?/strong>


  面向?qū)ο笫窍鄬τ诿嫦蜻^程而言的,面向過程強(qiáng)調(diào)的是功能,面向?qū)ο髲?qiáng)調(diào)的是將功能封裝進(jìn)對象,強(qiáng)調(diào)具備功能的對象;



  20、面向?qū)ο蟮乃枷胩攸c(diǎn):


  是符合人們思考習(xí)慣的一種思想;


  將復(fù)雜的事情簡單化了;


  將程序員從執(zhí)行者變成了指揮者;


  比如我要達(dá)到某種結(jié)果,我就尋找能幫我達(dá)到該結(jié)果的功能的對象,如我要洗衣服我就買洗衣機(jī),至于怎么洗我不管。



  21、面向?qū)ο蟮奶匦?/strong>


  3 大特性,封裝、繼承、多態(tài)



  22、面向?qū)ο筇匦缘睦斫?/strong>


  繼承:繼承是從已有類得到繼承信息創(chuàng)建新類的過程。(java中用extends關(guān)鍵字表示)


  多個(gè)類中存在相同屬性和行為時(shí),將這些內(nèi)容抽取到單獨(dú)一個(gè)類中,那么多個(gè)類無需再定義這些屬性和行為,只要繼承那個(gè)類即可


  封裝:隱藏對象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對外提供公共訪問方式


  通常認(rèn)為封裝是把數(shù)據(jù)和操作數(shù)據(jù)的方法綁定起來,對數(shù)據(jù)的訪問只能通過已定義的接口。面向?qū)ο蟮谋举|(zhì)就是將現(xiàn)實(shí)世界描繪成一系列完全自治、封閉的對象。我們在類中編寫的方法就是對實(shí)現(xiàn)細(xì)節(jié)的一種封裝;我們編寫一個(gè)類就是對數(shù)據(jù)和數(shù)據(jù)操作的封裝。可以說,封裝就是隱藏一切可隱藏的東西,只向外界提供最簡單的編程接口。


  多態(tài):一個(gè)對象在程序不同運(yùn)行時(shí)刻代表的多種狀態(tài),父類或者接口的引用指向子類對象



  多態(tài)性是指允許不同子類型的對象對同一消息作出不同的響應(yīng)。簡單的說就是用同樣的對象引用調(diào)用同樣的方法但是做了不同的事情。多態(tài)性分為編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。

  如果將對象的方法視為對象向外界提供的服務(wù),那么運(yùn)行時(shí)的多態(tài)性可以解釋為:當(dāng) A 系統(tǒng)訪問 B 系統(tǒng)提供的服務(wù)時(shí), B 系統(tǒng)有多種提供服務(wù)的方式,但一切對 A 系統(tǒng)來說都是透明的。


  方法重載(overload)實(shí)現(xiàn)的是編譯時(shí)的多態(tài)性(也稱為前綁定),而方法重寫(override)實(shí)現(xiàn)的是運(yùn)行時(shí)的多態(tài)性(也稱為后綁定)。


  運(yùn)行時(shí)的多態(tài)是面向?qū)ο笞罹璧臇|西,要實(shí)現(xiàn)多態(tài)需要做兩件事:


1、方法重寫(子類繼承父類并重寫父類中已有的或抽象的方法);


  2. 對象造型(用父類型引用引用子類型對象,這樣同樣的引用調(diào)用同樣的方法就會(huì)根據(jù)子類對象的不同而表現(xiàn)出不同的行為)


  繼承的特點(diǎn)、好處


  繼承的特點(diǎn):


(1)java中只能單繼承,沒有多繼承。


(2)java可以有多重(層)繼承。


  繼承的好處:


(1)繼承的出現(xiàn)提高了代碼的復(fù)用性。


(2)繼承的出現(xiàn)讓類與類之間產(chǎn)生了關(guān)系,提供了多態(tài)的前提。



  23、重寫和重載的區(qū)別? 重載的方法能否根據(jù)返回類型進(jìn)行區(qū)分?


  重載:在同一類中。方法名相同,參數(shù)列表不同。重載可以改變返回類型。


  重寫:在不同類中(子父類中)。方法聲明相同(返回類型,方法名,參數(shù)列表均相同)。


  方法的重載和重寫都是實(shí)現(xiàn)多態(tài)的方式,區(qū)別在于前者實(shí)現(xiàn)的是編譯時(shí)的多態(tài)性,而后者實(shí)現(xiàn)的是運(yùn)行時(shí)的多態(tài)性。


  重載發(fā)生在一個(gè)類中,同名的方法如果有不同的參數(shù)列表(參數(shù)類型不同、參數(shù)個(gè)數(shù)不同或者二者都不同)則視為重載;


  重寫發(fā)生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的返回類型,比父類被重寫方法更好訪問,不能比父類被重寫方法聲明更多的異常(里氏代換原則)。重載對返回類型沒有特殊的要求。


  方法重載的規(guī)則:


  (1)方法名一致,參數(shù)列表中參數(shù)的順序,類型,個(gè)數(shù)不同。


  (2)重載與方法的返回值無關(guān),存在于父類和子類, 同類中。


  (3)可以拋出不同的異常,可以有不同修飾符


  方法重寫的規(guī)則:


  (1)參數(shù)列表必須完全與被重寫方法的一致,返回類型必須完全與被重寫方法的返回類型一致。


  (2)構(gòu)造方法不能被重寫,聲明為 final 的方法不能被重寫,聲明為 static 的方法不能被重寫,但是能夠被再次聲明。


  (2)訪問權(quán)限不能比父類中被重寫的方法的訪問權(quán)限更低。


  (4)重寫的方法能夠拋出任何非強(qiáng)制異常(UncheckedException,也叫非運(yùn)行時(shí)異常),無論被重寫的方法是否拋出異常。但是,重寫的方法不能拋出新的強(qiáng)制性異常,或者比被重寫方法聲明的更廣泛的強(qiáng)制性異常,反之則可以。


  重寫需要注意:


  (1)子類方法的訪問權(quán)限要大于等于父類方法的訪問權(quán)限。


  (2)靜態(tài)只能重寫靜態(tài)。但是這種情況一般不會(huì)出現(xiàn)。



24、final關(guān)鍵字


  最終的意思,可以用于修飾類,方法,變量。


  final修飾的類不能被繼承。


  final修飾的方法不能被重寫。


  final修飾的變量是一個(gè)常量。只能被賦值一次。


  內(nèi)部類只能訪問被final修飾的局部變量。



  25、final 、finally 、finalize


  final 最終的意思。用于修飾類,成員變量,成員方法。它修飾的類不能被繼承,它修飾的變量時(shí)常量,它修飾的方法不能被重寫。


  finally 用于異常處理中。表示,必須要執(zhí)行的代碼塊,除非java虛擬機(jī)停止工作,否則一定會(huì)執(zhí)行


  finalize() 是Object類中的一個(gè)方法。用于java虛擬機(jī)的垃圾回收



  26、假如catch中有return語句, finally里中的代碼會(huì)執(zhí)行嗎?


  會(huì),在return前執(zhí)行finally里面的代碼。



  27、類和對象


  類:對現(xiàn)實(shí)世界中某類事物的描述,是抽象的,概念上的定義。


  對象:事物具體存在的個(gè)體。


  28、成員變量和局部變量的區(qū)別


  (1)作用域


  成員變量:針對整個(gè)類有效。


  局部變量:只在某個(gè)范圍內(nèi)有效。(一般指的就是方法,語句體內(nèi))


  (2)存儲(chǔ)位置


  成員變量:隨著對象的創(chuàng)建而存在,隨著對象的消失而消失,存儲(chǔ)在堆內(nèi)存中。


  局部變量:在方法被調(diào)用,或者語句被執(zhí)行的時(shí)候存在,存儲(chǔ)在棧內(nèi)存中。當(dāng)方法調(diào)用完,或者語句結(jié)束后,就自動(dòng)釋放。


  (3)初始值


  成員變量:有默認(rèn)初始值。


  局部變量:沒有默認(rèn)初始值,使用前必須賦值。



28、關(guān)鍵字private


  封裝在代碼中的體現(xiàn)


  私有的意思,權(quán)限修飾符


  用來修飾成員變量和成員函數(shù)


  用private修飾的成員只在本類中有效


  私有是封裝的一種體現(xiàn)



  29、構(gòu)造方法的特點(diǎn)、作用、注意


  (1)方法名與類名相同


  (2)沒有返回類型


  (3)沒有返回值


  作用


  構(gòu)造函數(shù)是用于創(chuàng)建對象,并對其進(jìn)行初始化賦值,對象一建立就自動(dòng)調(diào)用相對應(yīng)的構(gòu)造函數(shù)


  注意事項(xiàng)


  如果一個(gè)自定義類沒有構(gòu)造方法,系統(tǒng)會(huì)默認(rèn)給出一個(gè)無參構(gòu)造方法。


  如果一個(gè)自定義類提供了構(gòu)造方法,那么,系統(tǒng)將不再給出無參構(gòu)造方法。


  這個(gè)時(shí)候,你可以不使用無參構(gòu)造方法。如果你想使用,那么,就必須手動(dòng)給出無參構(gòu)造方法。


  建議:一般情況下,我們的自定義類都要手動(dòng)給出無參構(gòu)造方法。



  30、構(gòu)造方法和成員方法的區(qū)別


  (1)格式區(qū)別


  構(gòu)造方法和類名相同,并且沒有返回類型,也沒有返回值。


  普通成員方法可以任意起名,必須有返回類型,可以沒有返回值。


  (2)作用區(qū)別


  構(gòu)造方法用于創(chuàng)建對象,并進(jìn)行初始化值。


  普通成員方法是用于完成特定功能的。


  (3)調(diào)用區(qū)別


  構(gòu)造方法是在創(chuàng)建對象時(shí)被調(diào)用的,一個(gè)對象建立,只調(diào)用一次相應(yīng)構(gòu)造函數(shù)


  普通成員方法是由創(chuàng)建好的對象調(diào)用,可以調(diào)用多次


2.png



  31、匿名內(nèi)部類


  前提:繼承一個(gè)類或者實(shí)現(xiàn)一個(gè)接口


  格式:


3.png



  什么時(shí)候定義匿名內(nèi)部類?


  匿名內(nèi)部類只是為了簡化書寫,匿名內(nèi)部類有局限,通常定義匿名內(nèi)部類時(shí),該類方法不超過3個(gè)


  匿名內(nèi)部類的好處和弊端:


  好處:

  簡化代碼書寫


  弊端:


  (1)不能直接調(diào)用自己的特有方法


  (2)不能執(zhí)行強(qiáng)轉(zhuǎn)換動(dòng)作


  (3)如果該類里面方法較多,不允許使用匿名內(nèi)部類



  32、為什么函數(shù)不能根據(jù)返回類型來區(qū)分重載?


  因?yàn)檎{(diào)用時(shí)不能指定類型信息,編譯器不知道你要調(diào)用哪個(gè)函數(shù)。

4.png


  當(dāng)調(diào)用 max(1, 2);時(shí)無法確定調(diào)用的是哪個(gè),單從這一點(diǎn)上來說,僅返回值類型不同的重載是不應(yīng)該允許的。


  再比如對下面這兩個(gè)方法來說,雖然它們有同樣的名字和自變量,但其實(shí)是很容易區(qū)分的:

5.png


  若編譯器可根據(jù)上下文(語境)明確判斷出含義,比如在 int x=f()中,那么這樣做完全沒有問題。然而,我們也可能調(diào)用一個(gè)方法,同時(shí)忽略返回值;我們通常把這稱為“為它的副作用去調(diào)用一個(gè)方法” ,因?yàn)槲覀冴P(guān)心的不是返回值,而是方法調(diào)用的其他效果。所以假如我們像下面這樣調(diào)用方法: f(); Java 怎樣判斷 f()的具體調(diào)用方式呢?而且別人如何識(shí)別并理解代碼呢?由于存在這一類的問題,所以不能。


  函數(shù)的返回值只是作為函數(shù)運(yùn)行之后的一個(gè)“狀態(tài)”,他是保持方法的調(diào)用者與被調(diào)用者進(jìn)行通信的關(guān)鍵。并不能作為某個(gè)方法的“標(biāo)識(shí)”。



  33、抽象類和接口的區(qū)別


  抽象類(abstract class)、接口(interface)


  (1)不同:


  抽象類:


  抽象類中可以定義構(gòu)造器


  可以有抽象方法和具體方法


  接口中的成員全都是 public 的


  抽象類中可以定義成員變量


  有抽象方法的類必須被聲明為抽象類,而抽象類未必要有抽象方法


  抽象類中可以包含靜態(tài)方法


  一個(gè)類只能繼承一個(gè)抽象類


  接口:


  接口中不能定義構(gòu)造器


  方法全部都是抽象方法


  抽象類中的成員可以是 private、默認(rèn)、 protected、 public


  接口中定義的成員變量實(shí)際上都是常量


  接口中不能有靜態(tài)方法


  一個(gè)類可以實(shí)現(xiàn)多個(gè)接口


  (2)相同:


  不能夠?qū)嵗?/p>


  可以將抽象類和接口類型作為引用類型


  一個(gè)類如果繼承了某個(gè)抽象類或者實(shí)現(xiàn)了某個(gè)接口都需要對其中的抽象方法全部進(jìn)行實(shí)現(xiàn),否則該類仍然需要被聲明為抽象類



  34、抽象的(abstract)方法是否可....


  抽象的(abstract)方法是否可同時(shí)是靜態(tài)的(static), 是否可同時(shí)是本地方法(native),是否可同時(shí)被 synchronized


  都不能。抽象方法需要子類重寫,而靜態(tài)的方法是無法被重寫的,因此二者是矛盾的。本地方法是由本地代碼(如 C 代碼)實(shí)現(xiàn)的方法,而抽象方法是沒有實(shí)現(xiàn)的,也是矛盾的。 synchronized 和方法的實(shí)現(xiàn)細(xì)節(jié)有關(guān),抽象方法不涉及實(shí)現(xiàn)細(xì)節(jié),因此也是相互矛盾的。



  35、實(shí)現(xiàn)多態(tài)的機(jī)制是什么?


  靠的是父類或接口定義的引用變量可以指向子類或具體實(shí)現(xiàn)類的實(shí)例對象,而程序調(diào)用的方法在運(yùn)行期才動(dòng)態(tài)綁定,就是引用變量所指向的具體實(shí)例對象的方法,也就是內(nèi)存里正在運(yùn)行的那個(gè)對象的方法,而不是引用變量的類型中定義的方法。



  36、Person p = new Person();在內(nèi)存中做了哪些事情?


  將Person.class文件加載進(jìn)內(nèi)存中。


  如果p定義在主方法中,那么,就會(huì)在棧空間開辟一個(gè)變量空間p。


  在堆內(nèi)存給對象分配空間。


  對對象中的成員進(jìn)行默認(rèn)初始化。


  對對象中的成員進(jìn)行顯示初始化。


  調(diào)用構(gòu)造代碼塊對對象進(jìn)行初始化。(如果沒有就不執(zhí)行)


  調(diào)用構(gòu)造方法對對象進(jìn)行初始化。對象初始化完畢。


  將對象的內(nèi)存地址賦值給p變量,讓p變量指向該對象。



  37、靜態(tài)變量和成員變量的區(qū)別


  (1)調(diào)用方式

  靜態(tài)變量也稱為類變量,可以直接通過類名調(diào)用。也可以通過對象名調(diào)用。


  這個(gè)變量屬于類。


  成員變量也稱為實(shí)例變量,只能通過對象名調(diào)用。這個(gè)變量屬于對象。


  (2)存儲(chǔ)位置


  靜態(tài)變量存儲(chǔ)在方法區(qū)長中的靜態(tài)區(qū)。


  成員變量存儲(chǔ)在堆內(nèi)存。


  (3)生命周期


  靜態(tài)變量隨著類的加載而存在,隨著類的消失而消失。生命周期長。


  成員變量隨著對象的創(chuàng)建而存在,隨著對象的消失而消失。


  (4)與對象的相關(guān)性


  靜態(tài)變量是所有對象共享的數(shù)據(jù)。


  成員變量是每個(gè)對象所特有的數(shù)據(jù)。



  38、靜態(tài)變量和實(shí)例變量的區(qū)別?


  靜態(tài)變量屬于類,實(shí)例變量依存于某一實(shí)例


  靜態(tài)變量: 是被 static 修飾符修飾的變量,也稱為類變量,它屬于類,不屬于類的任何一個(gè)對象,一個(gè)類不管創(chuàng)建多少個(gè)對象,靜態(tài)變量在內(nèi)存中有且僅有一個(gè)拷貝;


  實(shí)例變量: 必須依存于某一實(shí)例,需要先創(chuàng)建對象然后通過對象才能訪問到它。靜態(tài)變量可以實(shí)現(xiàn)讓多個(gè)對象共享內(nèi)存。



  39、靜態(tài)的優(yōu)點(diǎn)和弊端


  優(yōu)點(diǎn):


  對對象的共享數(shù)據(jù)進(jìn)行單獨(dú)空間的存儲(chǔ),節(jié)省內(nèi)存,沒有必要每個(gè)對象都存儲(chǔ)一份


  可直接被類名調(diào)用


  弊端:


  生命周期過長,隨著類的消失而消失


  訪問出現(xiàn)權(quán)限,即靜態(tài)雖好但只能訪問靜態(tài)



  40、什么使用使用靜態(tài)?


  當(dāng)所有對象共享某個(gè)數(shù)據(jù)的時(shí)候,就把這個(gè)成員變量定義為靜態(tài)修飾的。


  當(dāng)某個(gè)方法沒有訪問該類中的非靜態(tài)成員,就可以把這個(gè)方法定義為靜態(tài)修飾。


  靜態(tài)的生命周期比較長,所以一般不推薦使用。



  41、break 和 continue 的區(qū)別?


  break 和 continue 都是用來控制循環(huán)的語句。


  break 用于完全結(jié)束一個(gè)循環(huán),跳出循環(huán)體執(zhí)行循環(huán)后面的語句。


  continue 用于跳過本次循環(huán),執(zhí)行下次循環(huán)。



  42、單例設(shè)計(jì)模式


  (1)設(shè)計(jì)模式:解決某類問題行之有效的方法,是一種思想,是規(guī)律的總結(jié)


  (2)用來保證某個(gè)類在內(nèi)存中只有一個(gè)對象


  (3)保證唯一性的思想及步驟


  1)為了避免其他程序建立該類對象,先禁止其他程序建立該類對象,即將構(gòu)造函數(shù)私有化


  2)為了其他程序訪問到該類對象,須在本類中創(chuàng)建一個(gè)該類私有對象


  3)為了方便其他程序訪問到該類對象,可對外提供一個(gè)公共訪問方式


  比如API中的Runtime類就是單例設(shè)計(jì)模式。


  4)單例設(shè)計(jì)模式的兩種方式


  餓漢式 當(dāng)類加載的時(shí)候,就創(chuàng)建對象。


  實(shí)例:


 7.png

  懶漢式 當(dāng)使用的時(shí)候,才去創(chuàng)建對象。


  實(shí)例:

8.png


  餓漢式和懶漢式的區(qū)別:


  餓漢式是類一加載進(jìn)內(nèi)存就創(chuàng)建好了對象;


  懶漢式則是類才加載進(jìn)內(nèi)存的時(shí)候,對象還沒有存在,只有調(diào)用了getInstance()方法時(shí),對象才開始創(chuàng)建。


  懶漢式是延遲加載,如果多個(gè)線程同時(shí)操作懶漢式時(shí)就有可能出現(xiàn)線程安全問題,可以加同步來解決線程安全問題。但是加了同步之后,每一次都要比較鎖,效率就變慢了,所以可以加雙重判斷來提高程序效率。



提交申請后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 91se在线看片国产免费观看 | 亚州一级毛片在线 | 成人黄色在线 | 夜夜爽夜夜操 | 国产视频你懂的 | 精品视频vs精品视频 | 日韩小视频网站 | 国产91久久最新观看地址 | 毛片免费视频网站 | 日日操日日射 | 香蕉视频免费网站 | 九九色综合网 | 中文字幕在线观看日韩 | 国外免费精品视频在线观看 | 男女性激烈动态图无遮挡 | 国产专区在线 | 特黄特a级特别特级特毛片 特黄特黄aaaa级毛片免费看 | 国产高清在线精品一区免费97 | 午夜0606| 国产精品欧美一区二区三区 | 国产无套免费网站 | 最近中文国语字幕在线播放视频 | 人人爱国产 | fc2在线亚洲一区 | 日韩视频免费在线观看 | 欧美综合色| 一道本高清香蕉网 | 色噜噜噜噜色 | 久久国产偷 | 久久精品伦理 | 免看一级一片一在线看 | 久草新在线 | 亚洲一级毛片 | 爽爽在线 | 欧美一及 | 欧美一区色 | 欧美视频一区在线观看 | 人人爽人人爽人人爽 | 18年大片免费在线 | 午夜在线观看视频 | 久久久999国产精品 久久久99精品 |