當(dāng)前位置:
首頁(yè) >
Java面试基础知识(1)
發(fā)布時(shí)間:2023/12/2
36
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Java面试基础知识(1)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、final, finally, finalize的區(qū)別 final:修飾符(關(guān)鍵字)如果一個(gè)類(lèi)被聲明為final,沒(méi)有子類(lèi)也不能被繼承。因此一個(gè)類(lèi)不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們?cè)谑褂弥胁槐桓淖儭1宦暶鳛閒inal的變量必須在聲明時(shí)給定初值,而在以后不可修改。被聲明為final的方法也同樣只能使用,不能重載 finally:再異常處理時(shí)提供 finally 塊來(lái)執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊(如果有的話)。 finalize:方法名。Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清理工作。 2、Anonymous Inner Class (匿名內(nèi)部類(lèi)) 是否可以extends(繼承)其它類(lèi),是否可以implements(實(shí)現(xiàn))interface(接口) 匿名的內(nèi)部類(lèi)是沒(méi)有名字的內(nèi)部類(lèi)。不能extends(繼承) 其它類(lèi),但一個(gè)內(nèi)部類(lèi)可以作為一個(gè)接口,由另一個(gè)內(nèi)部類(lèi)實(shí)現(xiàn)。 3、&和&&的區(qū)別。 &是位運(yùn)算符。&&是布爾邏輯運(yùn)算符。&&左邊為真右邊就不執(zhí)行了,&一直執(zhí)行完畢。 4、HashMap和Hashtable的區(qū)別。 都屬于Map接口的類(lèi),以鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù)。 HashMap 無(wú)序,它允許為空 Hashtable 類(lèi)似于 HashMap,但是不允許空,它也比 HashMap 慢,因?yàn)樗峭降摹? 5、ArrayList和Vector的區(qū)別 同步性:Vector是線程安全的,也就是說(shuō)是同步的,而ArrayList是線程序不安全的,不是同步的 數(shù)據(jù)增長(zhǎng):當(dāng)需要增長(zhǎng)時(shí),Vector默認(rèn)增長(zhǎng)為原來(lái)一培,而ArrayList卻是原來(lái)的一半 6、Collection 和 Collections的區(qū)別。 Collections是個(gè)java.util下的類(lèi),它包含有各種有關(guān)集合操作的靜態(tài)方法。 Collection是集合類(lèi)的上級(jí)接口,繼承與他的接口主要有Set 和List。 7、GC是什么? 為什么要有GC? 。 GC是垃圾收集器。Java 程序員不用擔(dān)心內(nèi)存管理,因?yàn)槔占鲿?huì)自動(dòng)進(jìn)行管理。Java提供的GC功能可以自動(dòng)監(jiān)測(cè)對(duì)象是否超過(guò)作用域從而達(dá)到自動(dòng)回收內(nèi)存的目的,Java語(yǔ)言沒(méi)有提供釋放已分配內(nèi)存的顯示操作方法。要請(qǐng)求垃圾收集,可以調(diào)用下面的方法之一:System.gc() Runtime.getRuntime().gc() System.gc();
Runtime.getRuntime().gc();
8、String s = new String("xyz");創(chuàng)建了幾個(gè)String Object?
兩個(gè)對(duì)象,一個(gè)是“xyx”,一個(gè)是指向“xyx”的引用對(duì)象s。
9、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11; 10、short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)? short s1 = 1; s1 = s1 + 1;有錯(cuò),s1是short型,s1+1是int型,不能顯式轉(zhuǎn)化為short型。可修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。 11、sleep() 和 wait() 有什么區(qū)別? 他們最大本質(zhì)的區(qū)別是:sleep()不釋放同步鎖,wait()釋放同步鎖?? 還有用法的上的不同是:sleep(milliseconds)可以用時(shí)間指定來(lái)使他自動(dòng)醒過(guò)來(lái),如果時(shí)間不到你只能調(diào)用interreput()來(lái)強(qiáng)行打斷;wait()可以用notify()直接喚起. sleep是Thread類(lèi)的靜態(tài)方法。 wait是Object的方法,也就是說(shuō)可以對(duì)任意一個(gè)對(duì)象調(diào)用wait方法,調(diào)用wait方法將會(huì)將調(diào)用者的線程掛起,直到其他線程調(diào)用同一個(gè)對(duì)象的notify方法才會(huì)重新激活調(diào)用者 12、數(shù)組有沒(méi)有l(wèi)ength()這個(gè)方法? String有沒(méi)有l(wèi)ength()這個(gè)方法? 數(shù)組沒(méi)有l(wèi)ength()這個(gè)方法,有l(wèi)ength的屬性。 ?String有有l(wèi)ength()這個(gè)方法。 13、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類(lèi)型? 方法的重寫(xiě)Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫(xiě)Overriding是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類(lèi)中多態(tài)性的一種表現(xiàn)。如果在子類(lèi)中定義某方法與其父類(lèi)有相同的名稱(chēng)和參數(shù),我們說(shuō)該方法被重寫(xiě) (Overriding)。如果在一個(gè)類(lèi)中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類(lèi)型,則稱(chēng)為方法的重(Overloading)。Overloaded的方法是可以改變返回值的類(lèi)型。 ? 14、"=="和equals方法究竟有什么區(qū)別? ==操作符專(zhuān)門(mén)用來(lái)比較兩個(gè)變量的值是否相等,也就是用于比較變量所對(duì)應(yīng)的內(nèi)存中所存儲(chǔ)的數(shù)值是否相同,要比較兩個(gè)基本類(lèi)型的數(shù)據(jù)或兩個(gè)引用變量是否相等,只能用==操作符。如果一個(gè)變量指向的數(shù)據(jù)是對(duì)象類(lèi)型的,那么,這時(shí)候涉及了兩塊內(nèi)存,對(duì)象本身占用一塊內(nèi)存(堆內(nèi)存),變量也占用一塊內(nèi)存,例如Objet obj = new Object();變量obj是一個(gè)內(nèi)存,new Object()是另一個(gè)內(nèi)存,此時(shí),變量obj所對(duì)應(yīng)的內(nèi)存中存儲(chǔ)的數(shù)值就是對(duì)象占用的那塊內(nèi)存的首地址。對(duì)于指向?qū)ο箢?lèi)型的變量,如果要比較兩個(gè)變量是否指向同一個(gè)對(duì)象,即要看這兩個(gè)變量所對(duì)應(yīng)的內(nèi)存中的數(shù)值是否相等,這時(shí)候就需要用==操作符進(jìn)行比較。 equals方法是用于比較兩個(gè)獨(dú)立對(duì)象的內(nèi)容是否相同,就好比去比較兩個(gè)人的長(zhǎng)相是否相同,它比較的兩個(gè)對(duì)象是獨(dú)立的。例如,對(duì)于下面的代碼: String a=new String("foo"); String b=new String("foo"); 兩條new語(yǔ)句創(chuàng)建了兩個(gè)對(duì)象,然后用a/b這兩個(gè)變量分別指向了其中一個(gè)對(duì)象,這是兩個(gè)不同的對(duì)象,它們的首地址是不同的,即a和b中存儲(chǔ)的數(shù)值是不相同的,所以,表達(dá)式a==b將返回false,而這兩個(gè)對(duì)象中的內(nèi)容是相同的,所以,表達(dá)式a.equals(b)將返回true。 15、error和exception有什么區(qū)別? error 表示很難恢復(fù)的一種嚴(yán)重問(wèn)題。比如說(shuō)內(nèi)存溢出。不可能指望程序能處理這樣的情況。 exception 表示一種設(shè)計(jì)或?qū)崿F(xiàn)問(wèn)題。也就是說(shuō),它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況 Exception表示程序需要捕捉和處理的的異常; Error表示系統(tǒng)級(jí)別的錯(cuò)誤和程序無(wú)需處理的。 16、List, Set, Map是否繼承自Collection接口? ? List,Set是???? Map不是 17、abstract class和interface有什么區(qū)別? 聲明方法的存在而不去實(shí)現(xiàn)它的類(lèi)被叫做抽象類(lèi)(abstract class)(只聲明不實(shí)現(xiàn),在子類(lèi)實(shí)現(xiàn)。可以有實(shí)現(xiàn)的方法和私有的方法) 接口(interface)是抽象類(lèi)的變體。接口中的所有方法都是抽象的,沒(méi)有一個(gè)有程序體。接口只可以定義static final成員變量。某個(gè)類(lèi)實(shí)現(xiàn)了接口,就必須實(shí)現(xiàn)接口里的所有方法。 1.抽象類(lèi)可以有構(gòu)造方法,接口中不能有構(gòu)造方法。 2.抽象類(lèi)中可以有普通成員變量,接口中沒(méi)有普通成員變量 3.抽象類(lèi)中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。 4. 抽象類(lèi)中的抽象方法的訪問(wèn)類(lèi)型可以是public,protected和默認(rèn),但接口中的抽象方法只能是public類(lèi)型的,并且默認(rèn)即為public abstract類(lèi)型。 5. 抽象類(lèi)中可以包含靜態(tài)方法,接口中不能包含靜態(tài)方法 6. 抽象類(lèi)和接口中都可以包含靜態(tài)成員變量,抽象類(lèi)中的靜態(tài)成員變量的訪問(wèn)類(lèi)型可以任意,但接口中定義的變量只能是public static final類(lèi)型,并且默認(rèn)即為public static final類(lèi)型。 7. 一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類(lèi)。 18、接口是否可繼承接口? 抽象類(lèi)是否可實(shí)現(xiàn)(implements)接口? 抽象類(lèi)是否可繼承實(shí)體類(lèi)(concrete class)? 接口可以繼承接口。抽象類(lèi)可以實(shí)現(xiàn)(implements)接口,抽象類(lèi)可以繼承實(shí)體類(lèi),但前提是實(shí)體類(lèi)必須有明確的構(gòu)造函數(shù)。 19、構(gòu)造器Constructor是否可被override? 構(gòu)造器Constructor不能被繼承,因此不能重寫(xiě)Overriding,但可以被重載Overloading。 20、是否可以繼承String類(lèi)? ? String類(lèi)是final類(lèi)故不可以繼承。 21、當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法? 不能,一個(gè)對(duì)象的一個(gè)synchronized方法只能由一個(gè)線程訪問(wèn)。 22、try {}里有一個(gè)return語(yǔ)句,那么緊跟在這個(gè)try后的finally {}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后? 會(huì)執(zhí)行,在return前執(zhí)行。 23、兩個(gè)對(duì)象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對(duì)不對(duì)? 不對(duì),有相同的hash code。(先判斷hashcode如果hashcode相等再判斷equals,所以如equals相等那么hashcode一定相等) 24、當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞? 是值傳遞。Java 編程語(yǔ)言只有值傳遞參數(shù)。當(dāng)一個(gè)對(duì)象實(shí)例作為一個(gè)參數(shù)被傳遞到方法中時(shí),參數(shù)的值就是對(duì)該對(duì)象的引用。對(duì)象的內(nèi)容可以在被調(diào)用的方法中改變,但對(duì)象的引用是永遠(yuǎn)不會(huì)改變的。 25、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? switch(expr1)中,expr1是一個(gè)整數(shù)表達(dá)式。因此傳遞給 switch 和 case 語(yǔ)句的參數(shù)應(yīng)該是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。 26、String與StringBuffer的區(qū)別。 String的長(zhǎng)度是不可變的,StringBuffer的長(zhǎng)度是可變的。StringBuffer內(nèi)容是可以修改的,String是不可修改的修改后就產(chǎn)生一個(gè)新的對(duì)象。如果你對(duì)字符串中的內(nèi)容經(jīng)常進(jìn)行操作,特別是內(nèi)容要修改時(shí),那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。 1.如果要操作少量的數(shù)據(jù)用 String 2.單線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) StringBuilder 3.多線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) StringBuffer(線程安全,速度比StringBuilder慢) 27、int 和 Integer 有什么區(qū)別 Java 提供兩種不同的類(lèi)型:引用類(lèi)型和原始類(lèi)型(或內(nèi)置類(lèi)型),Int是java的原始數(shù)據(jù)類(lèi)型,Integer是java為int提供的封裝類(lèi)。引用類(lèi)型和原始類(lèi)型具有不同的特征和用法,它們包括:大小和速度問(wèn)題,對(duì)象引用實(shí)例變量的缺省值為 null,而原始類(lèi)型實(shí)例變量的缺省值與它們的類(lèi)型有關(guān) 28、說(shuō)出ArrayList,Vector, LinkedList的存儲(chǔ)性能和特性 ArrayList和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號(hào)索引元素,但是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。 29、heap和stack有什么區(qū)別 stack的空間由操作系統(tǒng)自動(dòng)分配和釋放,heap的空間是手動(dòng)申請(qǐng)和釋放的,heap常用new關(guān)鍵字來(lái)分配。 stack空間有限,heap的空間是很大的自由區(qū)。 在Java中,若只是聲明一個(gè)對(duì)象,則先在棧內(nèi)存中為其分配地址空間,若再new一下,實(shí)例化它,則在堆內(nèi)存中為其分配地址。 如:Object a =null; 只在棧內(nèi)存中分配空間 Object b =new Object(); 則在堆內(nèi)存中分配空間 30、靜態(tài)變量和實(shí)例變量的區(qū)別? static i = 10; //常量 class A a;? a.i =10;//可變 31、什么是java序列化,如何實(shí)現(xiàn)java序列化? 序列化就是一種用來(lái)處理對(duì)象流的機(jī)制,所謂對(duì)象流也就是將對(duì)象的內(nèi)容進(jìn)行流化。可以對(duì)流化后的對(duì)象進(jìn)行讀寫(xiě)操作,也可將流化后的對(duì)象傳輸于網(wǎng)絡(luò)之間。序列化是為了解決在對(duì)對(duì)象流進(jìn)行讀寫(xiě)操作時(shí)所引發(fā)的問(wèn)題。 序列化的實(shí)現(xiàn):將需要被序列化的類(lèi)實(shí)現(xiàn)Serializable接口,該接口沒(méi)有需要實(shí)現(xiàn)的方法,implements Serializable 只是為了標(biāo)注該對(duì)象是可被序列化的,然后使用一個(gè)輸出流(如:FileOutputStream)來(lái)構(gòu)造一個(gè)ObjectOutputStream( 對(duì)象流)對(duì)象,接著使用ObjectOutputStream對(duì)象的writeObject(Object obj)方法就可以將參數(shù)為obj的對(duì)象寫(xiě)出(即 保存其狀態(tài)),要恢復(fù)的話則用輸入流。 32、java中有幾種類(lèi)型的流?JDK為每種類(lèi)型的流提供了一些抽象類(lèi)以供繼承,請(qǐng)說(shuō)出他們分別是哪些類(lèi)? 字節(jié)流,字符流。字節(jié)流繼承于InputStream OutputStream,字符流繼承于InputStreamReader OutputStreamWriter。在java.io包中還有許多其他的流,主要是為了提高性能和使用方便。 33、同步和異步有何異同,在什么情況下分別使用他們?舉例說(shuō)明。 如果數(shù)據(jù)將在線程間共享。例如正在寫(xiě)的數(shù)據(jù)以后可能被另一個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個(gè)線程寫(xiě)過(guò)了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取。 當(dāng)應(yīng)用程序在對(duì)象上調(diào)用了一個(gè)需要花費(fèi)很長(zhǎng)時(shí)間來(lái)執(zhí)行的方法,并且不希望讓程序等待方法的返回時(shí),就應(yīng)該使用異步編程,在很多情況下采用異步途徑往往更有效率。 34、請(qǐng)說(shuō)出你所知道的線程同步的方法。 wait():使一個(gè)線程處于等待狀態(tài),并且釋放所持有的對(duì)象的lock。 sleep():使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是一個(gè)靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。 notify():喚醒一個(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切的喚醒某一個(gè)等待狀態(tài)的線程,而是由JVM確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。 Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個(gè)對(duì)象的鎖,而是讓它們競(jìng)爭(zhēng)。 35、多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么? 多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類(lèi)與實(shí)現(xiàn)Runnable接口,同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify 36、線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系 線程指在程序執(zhí)行過(guò)程中,能夠執(zhí)行程序代碼的一個(gè)執(zhí)行單位,每個(gè)程序至少都有一個(gè)線程,也就是程序本身。 Java中的線程有四種狀態(tài)分別是:運(yùn)行、就緒、掛起、結(jié)束 37、簡(jiǎn)述synchronized和java.util.concurrent.locks.Lock的異同 主要相同點(diǎn):Lock能完成synchronized所實(shí)現(xiàn)的所有功能 主要不同點(diǎn):Lock有比synchronized更精確的線程語(yǔ)義和更好的性能。synchronized會(huì)自動(dòng)釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。 38、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法主動(dòng)通知虛擬機(jī)進(jìn)行垃圾回收 對(duì)于GC來(lái)說(shuō),當(dāng)程序員創(chuàng)建對(duì)象時(shí),GC就開(kāi)始監(jiān)控這個(gè)對(duì)象的地址、大小以及使用情況。通常,GC采用有向圖的方 式記錄和管理堆(heap)中的所有對(duì)象。通過(guò)這種方式確定哪些對(duì)象是"可達(dá)的",哪些對(duì)象是"不可達(dá)的"。當(dāng)GC確定一些 對(duì)象為"不可達(dá)"時(shí),GC就有責(zé)任回收這些內(nèi)存空間。可以。程序員可以手動(dòng)執(zhí)行System.gc(),通知GC運(yùn)行,但是Java 語(yǔ)言規(guī)范并不保證GC一定會(huì)執(zhí)行。 39、運(yùn)行時(shí)異常與一般異常有何異同 Java提供了兩類(lèi)主要的異常:runtime exception和checked exception。checked 異常也就是我們經(jīng)常遇到的IO異常,以及SQL異常都是這種異常。對(duì)于這種異常,JAVA編譯器強(qiáng)制要求我們必需對(duì)出現(xiàn)的這些異常進(jìn)行catch。所以,面對(duì)這種異常不管我們是否愿意,只能自己去寫(xiě)一大堆catch塊去處理可能的異常。但是另外一種異常:runtime exception,也稱(chēng)運(yùn)行時(shí)異常,我們可以不處理。當(dāng)出現(xiàn)這樣的異常時(shí),總是由虛機(jī)接管。比如:我們從來(lái)沒(méi)有人去處理過(guò)NullPointerException異常,它就是運(yùn)行時(shí)異常,并且這種異常還是最常見(jiàn)的異常之一。出現(xiàn)運(yùn)行時(shí)異常后,系統(tǒng)會(huì)把異常一直往上層拋,一直遇到處理代碼。如果沒(méi)有處理塊,到最上層,如果是多線程就由Thread.run()拋出,如果是單線程就被main()拋出。拋出之后,如果是線程,這個(gè)線程也就退出了。如果是主程序拋出的異常,那么這整個(gè)程序也就退出了。運(yùn)行時(shí)異常是Exception的子類(lèi),也有一般異常的特點(diǎn),是可以被Catch塊處理的。只不過(guò)往往我們不對(duì)他處理罷了。也就是說(shuō),你如果不對(duì)運(yùn)行時(shí)異常進(jìn)行處理,那么出現(xiàn)運(yùn)行時(shí)異常之后,要么是線程中止,要么是主程序終止。 40、Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用 當(dāng)JAVA程序違反了JAVA的語(yǔ)義規(guī)則時(shí),JAVA虛擬機(jī)就會(huì)將發(fā)生的錯(cuò)誤表示為一個(gè)異常。違反語(yǔ)義規(guī)則包括2種情況。一種是JAVA類(lèi)庫(kù)內(nèi)置的語(yǔ)義檢查。例如數(shù)組下標(biāo)越界,會(huì)引發(fā)IndexOutOfBoundsException;訪問(wèn)null的對(duì)象時(shí)會(huì)引發(fā)N ullPointerException。另一種情況就是JAVA允許程序員擴(kuò)展這種語(yǔ)義檢查,程序員可以創(chuàng)建自己的異常,并自由選擇在何時(shí)用throw關(guān)鍵字引發(fā)異常。所有的異常都是java.lang.Thowable的子類(lèi)。 41、編程題: 寫(xiě)一個(gè)Singleton出來(lái)。 Singleton模式主要作用是保證在Java應(yīng)用程序中,一個(gè)類(lèi)Class只有一個(gè)實(shí)例存在。 一般Singleton模式通常有幾種種形式: 第一種形式: 1 public class Singleton { 2 private Singleton(){} 3 private static Singleton instance = new Singleton(); 4 public static Singleton getInstance() { 5 return instance; 6 }} View Code 第二種形式: 1 public class Singleton { 2 private static Singleton instance = null; 3 4 public static synchronized Singleton getInstance() { 5 if (instance==null) 6 instance=new Singleton(); 7 return instance; 8 } 9 } View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/zhangjinru123/p/7224548.html
總結(jié)
以上是生活随笔為你收集整理的Java面试基础知识(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python学习第三十二节(进程间通信、
- 下一篇: Java bean 是个什么概念?