日韩 亚洲一区二_久久vs国产综合色大全_国产精品福利在线_欧美在线一级A片免费观看欧美在线_女同性毛片60分钟

您現(xiàn)在所在的位置:首頁(yè) >學(xué)員就業(yè) > 就業(yè)寶典 > Java基礎(chǔ)面試題,你能做對(duì)多少?

Java基礎(chǔ)面試題,你能做對(duì)多少?

來(lái)源:奇酷教育 發(fā)表於:

基礎(chǔ)1 switch支持的類(lèi)型:byte, short, int, char, enum,注意:不支持long,double,JDK7之後,開(kāi)始支持String。 簡(jiǎn)單示例 public c

基礎(chǔ)

  • 1 switch支持的類(lèi)型:byte, short, int, char, enum,

    注意:不支持long,double,JDK7之後,開(kāi)始支持String。


//簡(jiǎn)單示例

  public class MyDemo {      

         public static void main(String... args) {

          Demo demo = Demo.A;          

            switch (demo) {              

                       case A:                  

                    break;              

                       case B:                  

                    break;

          }

      }      

          enum Demo {

          A,

          B,

          C

      }

  }

餓漢式

  • 2 if和switch的區(qū)別:

    if :1.對(duì)具體的值進(jìn)行判斷  2.對(duì)區(qū)間判斷  3.對(duì)運(yùn)算結(jié)果是boolean類(lèi)型的表達(dá)式進(jìn)行判斷

    switch :1.對(duì)具體的值進(jìn)行判斷;2.值的個(gè)數(shù)通常是固定的。

    對(duì)於幾個(gè)固定值的判斷,建議使用switch語句,因為switch語句會(huì)將具體的答案加載進(jìn)內(nèi)存,相對(duì)高效一點(diǎn)。

  • 重載和重寫(xiě)的區(qū)別

    • 重載:允許存在一個(gè)以上的同名函數(shù),只要它們的參數(shù)類(lèi)型不同即可。

    • 重寫(xiě):當(dāng)子類(lèi)繼承父類(lèi),沿襲了父類(lèi)的功能到子類(lèi)中,子類(lèi)雖具備該功能,但功能內(nèi)容不一致,這是使用覆蓋特性,保留父類(lèi)的功能定義,並重寫(xiě)功能內(nèi)容。

  • 單例模式


private static Single s = new Single ( ) ;          

        private Single ( ) { }  

          public static Single getInstance () 

          {          

           return s ;

          }

      懶漢式

 


class Single {      

   public static Single getInstance (){          

        if ( s== null ){              

           synchronized (Single.class){//鎖不讀可以提高效率

              if ( s== null ){

                  s = new Single () ;

               }

           }          

           return s ;

      }

  }

特殊關(guān)鍵字:final

 


1. 可以修飾類(lèi)、函數(shù)、變量;  

2. 被final修飾的類(lèi)不可以被繼承。為了避免被繼承,被子類(lèi)複寫(xiě)。final class Demo { }  

3. 被final修飾的方法不可以被複寫(xiě)。final void show () { }  

4. 被final 修飾的變量是一個(gè)常量,只能賦值一次。  

5. 內(nèi)部類(lèi)定義在類(lèi)中的局部位置上時(shí),只能訪(fǎng)問(wèn)該局部被final修飾的局部變量。

      異常:(關(guān)於問(wèn)題1,謝謝ylt提醒)

 


 try{}catch(){}finally{}  

 1.catchreturn(),finally{}會(huì)不會(huì)執(zhí)行?

  答:會(huì),會(huì)在return之後執(zhí)行。  

 2.finally()在什麼情況下不會(huì)執(zhí)行

  答:只有一種情況不會(huì)執(zhí)行,當(dāng)執(zhí)行到System.exit(0)時(shí),finally不會(huì)執(zhí)行。

 


public class Test {  public static void main(String[] args) {

      System.out.println("haha:" + haha(true));

  }  

private static boolean haha(boolean isTrue) {      

    try {          

         int i = 1 / 0;          

         return  isTrue ? System.out.printf("return try !null ", "test") != null : System.out.printf("return try null ", "test") == null;

      } catch (Exception e) {

          System.out.println("catch");          

          return  isTrue ? System.out.printf("return catch !null ", "test") != null : System.out.printf("return catch null ", "test") == null;

      } finally {            

          System.out.println("");

          System.out.println("finally");

      }        

  }

}

//列印結(jié)果:

catch

return catch !null 

finally

haha:true

Java靜態(tài)代碼塊、構(gòu )造函數(shù)、構(gòu )造代碼塊

  • 先看下面一段代碼,運(yùn)行Test,會(huì)列印什麼?

     


package test;  

public class Test {      

   public static void main(String... args) {

          TestA a;

          a = new TestA();

          a = new TestA();

          TestA aa = new TestA();

      }

  }  

  class TestA {

      {

          System.out.println("TestA code create");

      }      

          private TestB b = new TestB();      

          private static TestC c = new TestC();      

          

          public TestA() {

              System.out.println("TestA create");

      }      

          

          static {

             System.out.println("TestA static create");

      }

  }  

  class TestB {      

     public TestB() {

          System.out.println("TestB create");

      }

  }  

  class TestC {      

     public TestC() {

          System.out.println("TestC create");

      }

  }

列印結(jié)果:

 


TestC create

TestA static create

TestA code create

TestB create

TestA create

TestA code create

TestB create

TestA create

TestA code create

TestB create

TestA create

static特點(diǎn):

 


  1.    隨著類(lèi)的加載而加載(隨著類(lèi)的消失而消失,生命周期最長(zhǎng))  

  2.    優(yōu)先於對(duì)象存在  

  3.    被所有對(duì)象所共享  

  4.    可以直接被類(lèi)所調(diào)用  

  5.    static是一個(gè)修飾符,用於修飾成員

構(gòu )造代碼塊

 


作用:給對(duì)象進(jìn)行初始化,對(duì)象一建立就運(yùn)行,而且優(yōu)先於構(gòu )造函數(shù)執(zhí)行。



  和構(gòu )造函數(shù)的區(qū)別:

  構(gòu )造代碼塊是給所有對(duì)象進(jìn)行統(tǒng)一初始化;而構(gòu )造函數(shù)是給對(duì)應(yīng)的對(duì)象初始化

  構(gòu )造代碼塊中定義的是不同對(duì)象共性的初始化內(nèi)容

靜態(tài)代碼塊

 


 static

  {

      靜態(tài)代碼塊中的執(zhí)行語句;

  }

  特點(diǎn):隨著類(lèi)的加載而執(zhí)行,只執(zhí)行一次(再new一個(gè)對(duì)象也不會(huì)執(zhí)行,類(lèi)只加載一次),

  如果定義在有主函數(shù)的類(lèi)中,則優(yōu)先於主函數(shù)執(zhí)行。用於給類(lèi)進(jìn)行初始化。

  有些類(lèi)不用創(chuàng)建對(duì)象,無(wú)法用構(gòu )造函數(shù)初始化,就通過(guò)靜態(tài)代碼塊初始化。



  執(zhí)行順序:靜態(tài)代碼塊先執(zhí)行,如果有對(duì)象,構(gòu )造代碼塊先執(zhí)行,然後是構(gòu )造函數(shù)。

  如果沒有對(duì)象,則構(gòu )造代碼塊和構(gòu )造函數(shù)都不會(huì)執(zhí)行。

Java-封裝、繼承、多態(tài)

抽象類(lèi)的特點(diǎn):

 


 1.    抽象方法一定在抽象類(lèi)中。  

 2.    抽象方法和抽象類(lèi)都必須被abstract關(guān)鍵字修飾。  

 3.    抽象類(lèi)不可以用new創(chuàng)建對(duì)象,因為調(diào)用抽象方法沒有意義。  

 4.    抽象類(lèi)中的抽象方法要被使用,必須由子類(lèi)複寫(xiě)所有的抽象方法後,建立子類(lèi)對(duì)象調(diào)用。如果子類(lèi)只覆蓋了部分抽象方法,那麼該子類(lèi)還是一個(gè)抽象類(lèi)。強(qiáng)迫子類(lèi)複寫(xiě),強(qiáng)迫子類(lèi)做一些事。  

 5.    抽象類(lèi)中可以不定義抽象方法,如果不定義抽象方法,那麼抽象類(lèi)的功能就是為了不讓該類(lèi)建立對(duì)象。

抽象關(guān)鍵字不可以和哪些關(guān)鍵字共存?

 


 答(1private不能:抽象方法就是給子類(lèi)覆蓋的,私有了就不能覆蓋了。

   (2static不能:static可以直接用類(lèi)名調(diào)用,而調(diào)用抽象方法沒有意義。

   (3final 不能:final修飾的方法不可以被複寫(xiě),修飾的類(lèi)不可以被繼承。與abstract衝突。

接口的特點(diǎn)

 


       接口是對(duì)外暴露的規(guī)則。

  ●    接口是程序的功能擴展。

  ●    接口可以多實(shí)現(xiàn)。

  ●    類(lèi)與接口直接是實(shí)現(xiàn)關(guān)係,而且類(lèi)可以繼承一個(gè)類(lèi)的同時(shí)實(shí)現(xiàn)多個(gè)接口。

  ●    接口與接口之間可以有繼承關(guān)係,可以多繼承。

       因為接口沒有方法體,不會(huì)存在兩(liǎng)個(gè)父類(lèi)出現(xiàn)同一個(gè)方法但是方法體不同的情況,

       不會(huì)引起衝突,如下:  

       

  public class Test implements d{     

      public static void main(String... args) {

      }      

      

      @Override

      public void as() {

      }

  }  

      

      interface d extends e,f {

  }  

      interface f{      

      void as();

  }  

      interface e{      

      void as();

  }

接口和抽象類(lèi)的異同點(diǎn):

 


 相同點(diǎn):都是不斷向上抽取而來(lái)的。不可以被實(shí)例化



 不同點(diǎn):1.    抽象類(lèi)需要被繼承,而且只能單繼承;接口需要被實(shí)現(xiàn),而且可以多實(shí)現(xiàn)  

        2.    抽象類(lèi)中可以定義抽象方法和非抽象方法,子類(lèi)繼承後,可以直接使用非抽象方法;

        接口只能定義抽象方法,必須有子類(lèi)實(shí)現(xiàn)。  

        3.    抽象類(lèi)的繼承,是is a關(guān)係,在定義該體系的基本共性內(nèi)容;

              接口的實(shí)現(xiàn)是like a 關(guān)係,在定義體系額外功能。

繼承

 


  子類(lèi)的實(shí)例化過(guò)程:

  結(jié)論:子類(lèi)的所有的構(gòu )造函數(shù),默認(rèn)都會(huì)訪(fǎng)問(wèn)父類(lèi)中空參數(shù)構(gòu )造函數(shù),因為子類(lèi)中每一個(gè)構(gòu )造函數(shù)內(nèi)的第一行都有一句隱式的super() ;

  當(dāng)父類(lèi)中沒有空參數(shù)的構(gòu )造函數(shù)時(shí),子類(lèi)必須手動(dòng)通過(guò)super或者this語句形式來(lái)指定要訪(fǎng)問(wèn)的構(gòu )造函數(shù)。

  當(dāng)然:子類(lèi)的構(gòu )造函數(shù)第一行也可以手動(dòng)指定this語句來(lái)訪(fǎng)問(wèn)本類(lèi)中的構(gòu )造函數(shù),

  子類(lèi)中至少會(huì)有一個(gè)構(gòu )造函數(shù)會(huì)訪(fǎng)問(wèn)到父類(lèi)中的構(gòu )造函數(shù)。

對(duì)象的初始化過(guò)程,見(jiàn)下圖:

列印結(jié)果