java实体类转map_十五道经典面试题-JAVA基础篇
十五道JAVA基礎(chǔ)面試題送給有需要的童鞋,但是不得不多提醒一句,打鐵還需自身硬,計算機(jī)軟件這個行業(yè),技術(shù)和學(xué)歷才是王道。好了,廢話不多說,上菜:
一:面向?qū)ο蟮奶卣饔心男┓矫?
1. 抽象:抽象就是忽略一個主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細(xì)節(jié)。抽象包括兩個方面,一是過程抽象,二是數(shù)據(jù)抽象。
2. 繼承:繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現(xiàn)有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。
3. 封裝:封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的界面。面向?qū)ο笥嬎闶加谶@個基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護(hù)的接口訪問其他對象。
4. 多態(tài)性:多態(tài)性是指允許不同類的對象對同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好的解決了應(yīng)用程序函數(shù)同名問題。
Person p = new Student();
p.a(); p.b(); ((Student)p).c();
二:int 和 Integer(包裝) 有什么區(qū)別
Java 提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。Int是java的原始數(shù)據(jù)類型,Integer是java為int提供的封裝類。Java為每個原始類型提供了封裝類。
原始類型封裝類booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble
引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲,當(dāng)引用類型和原始類型用作某個類的實(shí)例數(shù)據(jù)時所指定的缺省值。對象引用實(shí)例變g量的缺省值為 null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)。
break 和continue的區(qū)別:
break:跳出循環(huán),不再執(zhí)行剩余部分。
continue:停止當(dāng)次循環(huán),回到循環(huán)起始處,進(jìn)入下一次循環(huán)操作。continue語句之后的語句將不在執(zhí)行。
三:說出ArrayList,Vector, LinkedList的存儲性能和特性
ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素數(shù)大于實(shí)際存儲的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數(shù)組元素移動等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲,按序號索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。
四:HashMap和Hashtable的區(qū)別。
HashMap是Hashtable的輕量級實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。 Hashtable繼承自Dictionary類,而HashMap是Java1.2引進(jìn)的Map interface的一個實(shí)現(xiàn)。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。
五:Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
Overload:重載:1方法名相同 2參數(shù)列表不同(參數(shù)個數(shù),參數(shù)類型,參數(shù)順序) 3與返回值無關(guān)
Override:重寫: 1方法名相同 2參數(shù)列表也同 3一般發(fā)生在子類 4與返回值無關(guān)
方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調(diào)用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型
六:abstract class和interface有什么區(qū)別?
public abstract A
{
public abstract b();
public void c()
{
sss
}
}
1抽象類中,既能包含抽象方法,又可以包含 非抽象方法
2 接口中 只能是 public abstarct方法(即使沒有表名 public abstract,也會默認(rèn)是public abstarct)
3 抽象類中 可以不包含抽象方法
4如果類中 有抽象方法,則次類必須是抽象類
5 用途:抽象類 ,用于一個模板(例如,可以把對數(shù)據(jù)庫的操作 封裝成一個 抽象的工具類, 以后要用…..); 接口,用于標(biāo)準(zhǔn)(比如DAO、SERVICE層 需要先定義一個 接口用于指定增刪改查標(biāo)準(zhǔn))。
聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstract class),它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實(shí)例。然而可以創(chuàng)建一個變量,其類型是一個抽象類,并讓它指向具體子類的一個實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實(shí)現(xiàn),否則它們也是抽象類為。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法。接口(interface)是抽象類的變體
在接口中,所有方法都是抽象的。多繼承性可通過實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類的任何對象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來決定某對象的類是否實(shí)現(xiàn)了接口。
七:short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯? short s1 = 1; s1 = s1 + 1; (s1+1運(yùn)算結(jié)果是int型,需要強(qiáng)制轉(zhuǎn)換類型,這樣子才可以正確的編譯) short s1 = 1; s1 += 1;(可以正確編譯)
+=、-=、*=、/= 運(yùn)算符擁有一個內(nèi)置轉(zhuǎn)換器,當(dāng)左右兩邊都是整數(shù)時,會自動將等號右邊 轉(zhuǎn)為等號左邊的類型
八:Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
四舍五入 11.7—》12 11.4—》11 :特點(diǎn) +0.5后 取整
Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回與參數(shù)最接近的長整數(shù),參數(shù)加1/2后求其floor.
九:String s = new String("xyz");創(chuàng)建了幾個String Object?
兩個或一個。
1個:如果執(zhí)行此句之前,常量池里已經(jīng)存在XYZ,則只通過new產(chǎn)生一個對象;
2個:如果執(zhí)行句之前,常量池中不存在XYZ,則先根據(jù)"xyz"給常量池中產(chǎn)生一個“xyz”,之后再根據(jù)new 產(chǎn)生一個”xyz”
兩個一個是”xyz”,一個是s對”xyz”的引用
十:接口是否可繼承接口? 抽象類是否可實(shí)現(xiàn)(implements)接口? 抽象類是否可繼承實(shí)體類(concrete class)?
接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類可以繼承實(shí)體類,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)。
十一:數(shù)組有沒有l(wèi)ength()這個方法? String有沒有l(wèi)ength()這個方法?數(shù)組沒有l(wèi)ength()這個方法,有l(wèi)ength的屬性。String有l(wèi)ength()這個方法
十二:請說出你所知道的線程同步的方法。
wait():使一個線程處于等待狀態(tài),并且釋放所持有的對象的lock。sleep():使一個正在運(yùn)行的線程處于睡眠狀態(tài),是一個靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。notify():喚醒一個處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時候,并不能確切的喚醒某一個等待狀態(tài)的線程,而是由JVM確定喚醒哪個線程,而且不是按優(yōu)先級。Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。
十三:你所知道的集合類都有哪些?主要方法?
最常用的集合類是 List 和 Map。 List 的具體實(shí)現(xiàn)包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲和操作任何類型對象的元素列表。 List 適用于按數(shù)值索引訪問元素的情形。 Map 提供了一個更通用的元素存儲方法。 Map 集合類用于存儲元素對(稱作“鍵”和“值”),其中每個鍵映射到一個值。
Collection
--List
--ArrayList,LinkedList
--Set
--HashSet、TreeSet
Map
--HashMap
①其中Collection中有public bolean add()方法,因此它的實(shí)現(xiàn)類ArrayList、LinkedList。。。都擁有add()方法。。。。除此之外,各個實(shí)現(xiàn)類 還擁有一些自身特有的方法,比如LinkedList擁有addFirst()方法。,。
。。。。
② 為了安全,我們還可以給集合加入 泛型,例如
Collection col = new ArrayList();那么col對象 只能用來處理String的元素。
③…List集合的源碼 分為兩大類,底層為數(shù)組 的 和底層為鏈表的。。。
十四:char型變量中能不能存貯一個中文漢字?為什么?
能夠定義成為一個中文的,因?yàn)?strong>①java中以unicode編碼,②一個char占16個位,所以放一個中文是沒問題的
可能的解釋為一個中文占16位,兩個字節(jié)。
如果只存儲英文/數(shù)字,則只需要8位即可;如果存儲特殊字符或中文,需要16位。
十五:覆蓋(重寫,override)和重載(overload)
覆蓋:覆蓋一個方法并對其重寫,以求達(dá)到不同的做用!覆蓋要注意一下幾點(diǎn):
1) 覆蓋的方法標(biāo)識必須要和被覆蓋的方法標(biāo)志完全匹配!
2) 覆蓋方法的返回值必須和被覆蓋方法的返回值一致!
3) 覆蓋方法所拋得異常必須和被覆蓋方法所拋得異常一致或者是其子類!
4) 被覆蓋的方法不能為private,否則其子類只是定義了一個方法,并沒有對其覆蓋!
重寫:定義一些名稱相同的方法,通過傳入?yún)?shù)的不同來區(qū)分這些方法,再調(diào)用 時,會根據(jù)不同的參數(shù)樣式來選擇合適的方法執(zhí)行!重載要注意一下幾點(diǎn):
1)在使用重載時只能通過不同的參數(shù)樣式,如:不同參數(shù)類型、不同參數(shù)個數(shù)、 不同參數(shù)順序!
2)不能通過訪問權(quán)限、返回類型、拋出異常來進(jìn)行重載!
3)方法的異常類型和數(shù)目不會對重載構(gòu)成影響!
4)對于繼承來說,如果父類方法訪問權(quán)限為private,那么就不能再子類對其重載,如果定義的話也只是定義一個新方法,而不會達(dá)到重載的效果
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的java实体类转map_十五道经典面试题-JAVA基础篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5标签属性大全_HTML5中vi
- 下一篇: winform什么时候会调用closed