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