Android開發知道的基本知識點總(二)

1.int與integer的區別
 答:1、Integer是int的包裝類,int則是java的一種基本數據類型
        2、Integer變量必須實例化後才能使用,而int變量不需要
        3、Integer實際是對象的引用,當new一個Integer時,實際上是生成一個指針指向此對象;而int則是直接存儲數據值
        4、Integer的默認值是null,int的默認值是0
2.探探對java多態的理解
 答:面向對象的三大基本特徵是:封裝、繼承、多態。
     封裝:爲私有變量創建公共方法,使得外部可以調用。這樣做的好處是實現了訪問控制,讓客戶端程序員無法觸及不應該觸及的部分(private),而內創建者不用擔心由於自己的修改使得客戶端程序員產生影響(public 調用)。
     繼承:在創建一個新類後,即使另外一個新類與其具有相似的功能,還必須重新創建一個新類。如果我們以現有的類爲基礎,將其方法和屬性複製到新類就好了,這就是繼承。子類繼承父類的方法和屬性。在父類的基礎上,可以添加新的接口元素,這樣就擴展了接口,雖然此類型還是可以替代基類,但不很完全,我們稱之爲is-like-a(像一個)關係;另外,若子類只是覆蓋(重寫,overriding)父類的方法,被稱爲純粹替代,是一種最爲理想的方法,導出類和基類的關係成爲is-a (是一個)關係。
  多態:同一消息可以根據發送對象的不同而採用多種不同的行爲方式。(發送消息就是函數調用)
 實現多態的技術稱爲:動態綁定(dynamic binding),是指在執行期間判斷所引用對象的實際類型,根據其實際的類型調用其相應的方法。
     多態的作用:消除類型之間的耦合關係。
     多態的實現的必要條件:繼承,重寫,父類引用指向子類對象(即,聲明是父類,實際指向的是子類的一個對象)
3.String、StringBuffer、StringBuilder區別
 答:String 字符串常量
        StringBuffer 字符串變量(線程安全)
        StringBuilder 字符串變量(非線程安全)
        String 類型和 StringBuffer 類型的主要性能區別其實在於 String 是不可變的對象, 因此在每次對 String 類型進行改變的時候其實都等同於生成了一個新的 String 對象,然後將指針指向新的 String 對象,所以經常改變內容的字符串最好不要用 String ,因爲每次生成對象都會對系統性能產生影響,特別當內存中無引用對象多了以後, JVM 的 GC 就會開始工作,那速度是一定會相當慢的。StringBuffer 類則結果就不一樣了,每次結果都會對 StringBuffer 對象本身進行操作,而不是生成新的對象,再改變對象引用。所以在一般情況下我們推薦使用 StringBuffer ,特別是字符串對象經常改變的情況下。而在某些特別情況下, String 對象的字符串拼接其實是被 JVM 解釋成了 StringBuffer 對象的拼接,所以這些時候 String 對象的速度並不會比 StringBuffer 對象慢,而特別是以下的字符串對象生成中, String 效率是遠要比 StringBuffer 快的:
     String S1 = “This is only a” + “ simple” + “ test”;
     StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);

      StringBuffer
      Java.lang.StringBuffer線程安全的可變字符序列。一個類似於 String 的字符串緩衝區,但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調用可以改變該序列的長度和內容。可將字符串緩衝區安全地用於多個線程。可以在必要時對這些方法進行同步,因此任意特定實例上的所有操作就好像是以串行順序發生的,該順序與所涉及的每個線程進行的方法調用順序一致。StringBuffer 上的主要操作是 append 和 insert 方法,可重載這些方法,以接受任意類型的數據。每個方法都能有效地將給定的數據轉換成字符串,然後將該字符串的字符追加或插入到字符串緩衝區中。append 方法始終將這些字符添加到緩衝區的末端;而 insert 方法則在指定的點添加字符。
  例如,如果 z 引用一個當前內容是“start”的字符串緩衝區對象,則此方法調用 z.append("le") 會使字符串緩衝區包含“startle”,而 z.insert(4, "le") 將更改字符串緩衝區,使之包含“starlet”。
    
    java.lang.StringBuilde
    java.lang.StringBuilder一個可變的字符序列是5.0新增的。此類提供一個與 StringBuffer 兼容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字符串緩衝區被單個線程使用的時候(這種情況很普遍)。如果可能,建議優先採用該類,因爲在大多數實現中,它比 StringBuffer 要快。兩者的方法基本相同。

4.什麼是內部類?內部類的作用
  答:內部類( Inner Class )就是定義在另外一個類裏面的類。與之對應,包含內部類的類被稱爲外部類。
          作用:1. 內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同一個包中的其他類訪問該類
                    2. 內部類的方法可以直接訪問外部類的所有數據,包括私有的數據
                    3. 內部類所實現的功能使用外部類同樣可以實現,只是有時使用內部類更方便
    分類:成員內部類 /靜態內部類/方法內部類/ 匿名內部類

5.抽象類和接口區別
  答:當你關注一個事物的本質的時候,用抽象類;當你關注一個操作的時候,用接口。
6.抽象類的意義
  答:抽象類的由來:我們在高度抽象一類事物的時候,由於是提取的此類事物公共行爲,但具體到某個具體的事物的時候,同一行爲又會有不同的表現。所以我們不應該在抽象階段就給出具體的實現,而只給出方法的聲明,也就是不給出方法體,在java中,沒有方法體的方法,我們稱之爲抽象方法,而類中有抽象方法,類就必須聲明爲抽象類,抽象類由此而來,而且有其存在的必要性。
      抽象類特點:抽象類和抽象方法用 abstract 關鍵字修飾。抽象類不能被實例化。(其實可以通過多態的方式實例化)抽象類除了不能直接實例化外,其它特性都和普通類一樣,同樣有成員變量,常量,成員方法。而抽象方法是強制子類實現的功能。
7.泛型中extends和super的區別
   答:<? extends T>限定參數類型的上界:參數類型必須是T或T的子類型
          <? super T> 限定參數類型的下界:參數類型必須是T或T的超類型
 總結爲:
   <? extends T> 只能用於方法返回,告訴編譯器此返參的類型的最小繼承邊界爲T,T和T的父類都能接收,但是入參類型無法確定,只能接受null的傳入
   <? super T>只能用於限定方法入參,告訴編譯器入參只能是T或其子類型,而返參只能用Object類接收? 既不能用於入參也不能用於返參
8.final,finally,finalize的區別
  答:1、final修飾符(關鍵字)。被final修飾的類,就意味着不能再派生出新的子類,不能作爲父類而被子類繼承。因此一個類不能既被abstract聲明,又被final聲明。將變量或方法聲明爲final,可以保證他們在使用的過程中不被修改。被聲明爲final的變量必須在聲明時給出變量的初始值,而在以後的引用中只能讀取。被final聲明的方法也同樣只能使用,不能重載。
     2、finally是在異常處理時提供finally塊來執行任何清除操作。不管有沒有異常被拋出、捕獲,finally塊都會被執行。try塊中的內容是在無異常時執行到結束。catch塊中的內容,是在try塊內容發生catch所聲明的異常時,跳轉到catch塊中執行。finally塊則是無論異常是否發生,都會執行finally塊的內容,所以在代碼邏輯中有需要無論發生什麼都必須執行的代碼,就可以放在finally塊中。
     3、finalize是方法名。java技術允許使用finalize()方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在object類中定義的,因此所有的類都繼承了它。子類覆蓋finalize()方法以整理系統資源或者被執行其他清理工作。 finalize()方法是在垃圾收集器刪除對象之前對這個對象調用的。

9.Serializable 和Parcelable 的區別
原文地址:http://www.jianshu.com/p/a60b609ec7e7
  爲什麼要了解序列化:進行Android開發的時候,無法將對象的引用傳給Activities或者Fragments,我們需要將這些對象放到一個Intent或者Bundle裏面,然後再傳遞。
  什麼是序列化:表示將一個對象轉換成可存儲或可傳輸的狀態。序列化後的對象可以在網絡上進行傳輸,也可以存儲到本地。
  怎麼通過序列化傳輸對象?
  Android中Intent如果要傳遞類對象,可以通過兩種方式實現。
   方式一:Serializable,要傳遞的類實現Serializable接口傳遞對象,
   方式二:Parcelable,要傳遞的類實現Parcelable接口傳遞對象。
 Serializable(Java自帶): Serializable是序列化的意思,表示將一個對象轉換成可存儲或可傳輸的狀態。序列化後的對象可以在網絡上進行傳輸,也可以存儲到本地。
 Parcelable(android 專用): 除了Serializable之外,使用Parcelable也可以實現相同的效果,
不過不同於將對象進行序列化,Parcelable方式的實現原理是將一個完整的對象進行分解, 而分解後的每一部分都是Intent所支持的數據類型,這樣也就實現傳遞對象的功能了。
  實現Parcelable的作用
   1)永久性保存對象,保存對象的字節序列到本地文件中;
   2)通過序列化對象在網絡中傳遞對象;
   3)通過序列化在進程間傳遞對象。
  選擇序列化方法的原則
  1)在使用內存的時候,Parcelable比Serializable性能高,所以推薦使用Parcelable。
  2)Serializable在序列化的時候會產生大量的臨時變量,從而引起頻繁的GC。
  3)Parcelable不能使用在要將數據存儲在磁盤上的情況,因爲Parcelable不能很好的保證數據的持續性在外界有變化的情況下。儘管Serializable效率低點,但此時還是建議使用Serializable 。

10.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章