java 安卓基础面试题_android-------Java 常问的基础面试题
1、"=="和equals方法究竟有什么區別?
==操作符專門用來比較兩個變量的值是否相等,也就是用于比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操作符。
equals方法是用于比較兩個獨立對象的內容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個對象是獨立的。
2、訪問修飾符public,private,protected,以及不寫(默認)時的區別?
區別如下:
作用域? ? 當前類? 同包 子類 其他
public ? ? ? ?√ ? ? ? ?√ ? ? ? √ ? ? ?√
protected ?√ ? ? ? ?√ ? ? ? √ ? ? ?×
default ? ? ? √ ? ? ??√ ? ? ? × ? ? ?×
private ? ? ? √ ? ? ? ?× ? ? ?× ? ? ?×
類的成員不寫訪問修飾時默認為default。默認對于同一個包中的其他類相當于公開(public),對于不是同一個包中的其他類相當于私有(private)。受保護(protected)對子類相當于公開,對不是同一包中的沒有父子關系的類相當于私有。
3、String 是最基本的數據類型嗎?
不是。Java中的基本數據類型只有8個:byte、short、int、long、float、double、char、boolean;除了基本類型(primitive type)和枚舉類型(enumeration type),剩下的都是引用類型(reference type)。
4、解釋內存中的棧(stack)、堆(heap)和靜態存儲區的用法。
通常我們定義一個基本數據類型的變量,一個對象的引用,還有就是函數調用的現場保存都使用內存中的??臻g;而通過new關鍵字和構造器創建的對象放在堆空間;程序中的字面量(literal)如直接書寫的100、“hello”和常量都是放在靜態存儲區中。??臻g操作最快但是也很小,通常大量的對象都是放在堆空間,整個內存包括硬盤上的虛擬內存都可以被當成堆空間來使用。
String str = new String(“hello”);
上面的語句中str放在棧上,用new創建出來的字符串對象放在堆上,而“hello”這個字面量放在靜態存儲區。
補充:較新版本的Java中使用了一項叫“逃逸分析“的技術,可以將一些局部對象放在棧上以提升對象的操作性能。
5、簡述如下關鍵字用途try、catch、throw、throws、finally
try:保護代碼,如果try中某行代碼出現異常,則try中代碼不再繼續執行。 b) catch:捕獲異常,當try中出現異常,則catch負責捕獲異常,并處理。
throw:拋出異常。
throws:聲明異常。
finally:無論try中是否出現異常,finally一定執行。
6、LinkedList和ArrayList區別?
ArrayList和LinkedList兩者都實現了List接口,但是它們之間有些不同。
(1)ArrayList是由Array所支持的基于一個索引的數據結構,所以它提供對元素的隨機訪問,復雜度為O(1),但LinkedList存儲一系列的節點數據,每個節點都與前一個和下一個節點相連接。所以,盡管有使用索引獲取元素的方法,內部實現是從起始點開始遍歷,遍歷到索引的節點然后返回元素,時間復雜度為O(n),比ArrayList要慢。
(2)與ArrayList相比,在LinkedList中插入、添加和刪除一個元素會更快,因為在一個元素被插入到中間的時候,不會涉及改變數組的大小,或更新索引。
(3)LinkedList比ArrayList消耗更多的內存,因為LinkedList中的每個節點存儲了前后節點的引用。
7、面向對象的特征有哪些方面?
面向對象的特征主要有以下幾個方面:
1)抽象:抽象是將一類對象的共同特征總結出來構造類的過程,包括數據抽象和行為抽象兩方面。抽象只關注對象有哪些屬性和行為,并不關注這些行為的細節是什么。
2)繼承:繼承是從已有類得到繼承信息創建新類的過程。提供繼承信息的類被稱為父類(超類、基類);得到繼承信息的類被稱為子類(派生類)。繼承讓變化中的軟件系統有了一定的延續性,同時繼承也是封裝程序中可變因素的重要手段(如果不能理解請閱讀閻宏博士的《Java與模式》或《設計模式精解》中關于橋梁模式的部分)。
3)封裝:通常認為封裝是把數據和操作數據的方法綁定起來,對數據的訪問只能通過已定義的接口。面向對象的本質就是將現實世界描繪成一系列完全自治、封閉的對象。我們在類中編寫的方法就是對實現細節的一種封裝;我們編寫一個類就是對數據和數據操作的封裝??梢哉f,封裝就是隱藏一切可隱藏的東西,只向外界提供最簡單的編程接口(可以想想普通洗衣機和全自動洗衣機的差別,明顯全自動洗衣機封裝更好因此操作起來更簡單;我們現在使用的智能手機也是封裝得足夠好的,因為幾個按鍵就搞定了所有的事情)。
4)多態性:多態性是指允許不同子類型的對象對同一消息作出不同的響應。簡單的說就是用同樣的對象引用調用同樣的方法但是做了不同的事情。多態性分為編譯時的多態性和運行時的多態性。如果將對象的方法視為對象向外界提供的服務,那么運行時的多態性可以解釋為:當A系統訪問B系統提供的服務時,B系統有多種提供服務的方式,但一切對A系統來說都是透明的(就像電動剃須刀是A系統,它的供電系統是B系統,B系統可以使用電池供電或者用交流電,甚至還有可能是太陽能,A系統只會通過B類對象調用供電的方法,但并不知道供電系統的底層實現是什么,究竟通過何種方式獲得了動力)。方法重載(overload)實現的是編譯時的多態性(也稱為前綁定),而方法重寫(override)實現的是運行時的多態性(也稱為后綁定)。運行時的多態是面向對象最精髓的東西,要實現多態需要做兩件事:1. 方法重寫(子類繼承父類并重寫父類中已有的或抽象的方法);2. 對象造型(用父類型引用引用子類型對象,這樣同樣的引用調用同樣的方法就會根據子類對象的不同而表現出不同的行為)。
8、String 和StringBuilder、StringBuffer 的區別?
共同點:String StringBuffer StringBuilder 都是字符串相關函數,StringBuffer StringBuilder都是AbstractStringBuilder的子類
不同點:
String內容不可變,StringBuffer StringBuilder內容可變
String與StringBuffer線程安全,StringBuilder非線程安全
如果程序不是多線程的,那么使用StringBuilder效率高于StringBuffer
9、重載(Overload)和重寫(Override)的區別。重載的方法能否根據返回類型進行區分?
方法的重載和重寫都是實現多態的方式,區別在于前者實現的是編譯時的多態性,而后者實現的是運行時的多態性。重載發生在一個類中,同名的方法如果有不同的參數列表(參數類型不同、參數個數不同或者二者都不同)則視為重載;重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的返回類型,比父類被重寫方法更好訪問,不能比父類被重寫方法聲明更多的異常(里氏代換原則)。重載對返回類型沒有特殊的要求。
10、抽象類(abstract class)和接口(interface)有什么異同?
抽象類和接口都不能夠實例化,但可以定義抽象類和接口類型的引用。一個類如果繼承了某個抽象類或者實現了某個接口都需要對其中的抽象方法全部進行實現,否則該類仍然需要被聲明為抽象類。接口比抽象類更加抽象,因為抽象類中可以定義構造器,可以有抽象方法和具體方法,而接口中不能定義構造器而且其中的方法全部都是抽象方法。抽象類中的成員可以是private、默認、protected、public的,而接口中的成員全都是public的。抽象類中可以定義成員變量,而接口中定義的成員變量實際上都是常量。有抽象方法的類必須被聲明為抽象類,而抽象類未必要有抽象方法。
11、HashMap和HashTable有何不同?
HashMap通過hashcode對其內容進行快速查找,而TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。
集合框架”提供兩種常規的Map實現:HashMap和TreeMap (TreeMap實現SortedMap接口)。
在Map 中插入、刪除和定位元素,HashMap 是最好的選擇。但如果您要按自然順序或自定義順序遍歷鍵,那么TreeMap會更好。使用HashMap要求添加的鍵類明確定義了hashCode()和 equals()的實現。
12、&操作符和&&操作符有什么區別?
當一個&表達式在求值的時候,兩個操作數都會被求值,&&更像是一個操作符的快捷方式。當一個&&表達式求值的時候,先計算第一個操作數,如果它返回true才會計算第二個操作數。如果第一個操作數取值為fale,第二個操作數就不會被求值。
總結
以上是生活随笔為你收集整理的java 安卓基础面试题_android-------Java 常问的基础面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java oracle rs.next_
- 下一篇: mybatis 中case_mybati