Android面試題

1、java的重載和重寫分別是什麼含義?

重載:
(1) 方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。
(2) java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。
(3) 重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同也可以不相同。無法以返回型別作爲重載函數的區分標準。

  public class Dog {
         Dog(){
           this.bark();
         }
         void bark(){//bark()方法是重載方法
           System.out.println("no barking!");
           this.bark("female", 3.4);
         }
         void bark(String m,double l){//注意:重載的方法的返回值都是一樣的,
           System.out.println("a barking dog!");
           this.bark(5, "China");
         }
         void bark(int a,String n){//不能以返回值區分重載方法,而只能以“參數類型”和“類名”來區分
            System.out.println("a howling dog");
         }
         public static void main(String[] args){
           Dog dog = new Dog();
           dog.bark();
           dog.bark("male", "yellow");
           dog.bark(5, "China");
         }
   }

重寫:
(1) 父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。
(2)若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
(3)子類函數的訪問修飾權限不能少於父類的;

 概念:即調用對象方法的機制。
    動態綁定的內幕:
    1、編譯器檢查對象聲明的類型和方法名,從而獲取所有候選方法。試着把上例Base類的test註釋掉,這時再編譯就無法通過。
    2、重載決策:編譯器檢查方法調用的參數類型,從上述候選方法選出唯一的那一個(其間會有隱含類型轉化)。
如果編譯器找到多於一個或者沒找到,此時編譯器就會報錯。試着把上例Base類的test(byte b)註釋掉,這時運行結果是1 1。
    3、若方法類型爲priavte static final ,java採用靜態編譯,編譯器會準確知道該調用哪
    個方法。
    4、當程序運行並且使用動態綁定來調用一個方法時,那麼虛擬機必須調用對象的實際類型相匹配的方法版本。
在例子中,b所指向的實際類型是TestOverriding,所以b.test(0)調用子類的test。
但是,子類並沒有重寫test(byte b),所以b.test((byte)0)調用的是父類的test(byte b)。
如果把父類的(byte b)註釋掉,則通過第二步隱含類型轉化爲int,最終調用的是子類的test(int i)。

2、Java關鍵字final和static是怎麼使用的?

在Java裏static (靜態的),是靜態關鍵字,用來修飾靜態變量、方法、代碼快等。
1、 當static修飾變量的時候,該變量將被JVM直接分配到堆內存上,且所有程序對其的引用都指向同一個地址,不會再進行重新分配內存空間,一般常用於修飾計數器。
2 、用來修飾方法的時候,注意該類中如果調用其他方法,則調用的方法也必須爲靜態的,但是變量可以聲明爲非靜態或者使用靜態全局變量。好處就是可以直接通過類名進行調用該方法,不用進行類的實例化。
3 、用來修飾代碼塊的時候,在類加載的時候就進行初始化代碼快裏的內容,這要比非靜態代碼塊執行更早,一般用於類的初始化操作。

在Java 裏 final可以用來修飾變量、方法、類
1 當定義一個final變量時,jvm會將其分配到常量池中,程序不可改變其值;
2 當修飾一個方法時,該方法在子類中將不能被重寫;
3 當修飾一個類時,該類不能被繼承。

補充:
關於static final和final static:
static final和final static沒什麼區別,一般static寫在前面。
static final:
static修飾的屬性強調它們只有一個,final修飾的屬性表明是一個常數(創建後不能被修改)。static final修飾的屬性表示一旦給值,就不可修改,並且可以通過類名訪問。
static final也可以修飾方法,表示該方法不能重寫,可以在不new對象的情況下調用


3、java線程池有哪幾種方式?構造函數的5個參數分別是什麼意義?

java中的有哪些線程池?
1.new CachedThreadPool創建一個可緩存線程池程
2.new FixedThreadPool 創建一個定長線程池
3.new ScheduledThreadPool 創建一個定長線程池
4.new SingleThreadExecutor 創建一個單線程化的線程池


4、實現java線程有哪幾種方式?請寫出核心代碼

1、繼承Thread類

public class MyThread extends Thread {
   public void run(){
   } 
}

2、實現Runnable接口

public class MyThread1 implements Runnable {
     @Override
     public void run() {
     }
 }

5、sleep()和wait()方法有什麼區別,簡述一下分別在哪些場景使用這個兩個方法?

調用:
wait():在對象上調用,並且當前線程必須在一個lockObj上同步。
sleep():在Thread上調用,總是當前正在執行的線程。
同步:
wait():如果同步,那麼多個線程會一個一個的訪問對象。
sleep():如果同步,多個線程都會等休眠線程甦醒。
維持鎖:
wait():釋放鎖,讓其他對象機會執行。
sleep():執型超時或者調用interrupt之前保持鎖。
甦醒條件:
wait():直到由對象調用notify(), notifyAll()
sleep():執型超時或者調用interrupt之前保持鎖。
用途:
sleep():時間同步;
wait():多線程同步。


6、簡述HashMap的用法,存儲結構,hashcode和equal方法在HashMap存儲過程中的作用?

hashmap是按照存儲結構來講是數組(散列桶)與鏈表的組合體


7、Activity有哪幾種啓動模式,分別有什麼作用,mainfest如何設置?請詳細說明

Standard模式是Android的默認啓動模式,你不在配置文件中做任何設置,那麼這個Activity就是standard模式,這種模式下,Activity可以有多個實例,每次啓動Activity,無論任務棧中是否已經有這個Activity的實例,系統都會創建一個新的Activity實例

singleTop模式的Activity已經位於任務棧的棧頂,再去啓動它時,不會再創建新的實例,如果不位於棧頂,就會創建新的實例

SingleTask模式的Activity在同一個Task內只有一個實例,如果Activity已經位於棧頂,系統不會創建新的Activity實例,和singleTop模式一樣。但Activity已經存在但不位於棧頂時,系統就會把該Activity移到棧頂,並把它上面的activity出棧。

singleInstance模式也是單例的,但和singleTask不同,singleTask只是任務棧內單例,系統裏是可以有多個singleTask Activity實例的,而singleInstance Activity在整個系統裏只有一個實例,啓動一singleInstanceActivity時,系統會創建一個新的任務棧,並且這個任務棧只有他一個Activity。

修改 android:launchMode="standard"


8、註冊廣播有幾種方式,這些方式有和優缺點?

例:
現有廣播類CustomBroadcastReceiver,action = "com.baidu.SENDBROADCAST",請寫出註冊廣播的核心代碼。


9、Android中的幾種動畫,請分別說明

View Animation(視圖動畫)
Drawable Animation(Drawable動畫)
Property Animation(屬性動畫)


10、簡述Handler、Looper、MessageQueue的作用和關係?Hander發送消息有哪幾種方式?Handler 處理消息有哪幾種方式?


11、請寫出你最熟悉的一種設計模式的代碼。


12、在ActivityA 和ActiityB之間如何傳遞一張圖片,假設圖片resId=R.drawable.ic_target。請用代碼表示。

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