1. 程式人生 > >2018Java面試題(Java基礎部分)

2018Java面試題(Java基礎部分)

1.Java中有哪些基本資料型別?String是基本資料型別嗎?String類是否能夠繼承?

答:1.java定義了4中類8種基本型別:
            整型:byte、short、int、long
            浮點型:float、double
            布林型: boolean
            字元型: char
        2.String不是基本資料型別,String屬於引用型別。
        3.String類是一個final類,因此不能被繼承。

2.簡述++i和i++的區別?

答:

  int i=0;
  System.out.print("++i先自加1再賦值得到結果是=");
  System.out.println(++i);
  控制檯列印:++i先自加1再賦值得到結果是=1
  ----------------------------------------
  int i=0;
  System.out.print("i++先賦值,然後再自加1得到結果=");
  System.out.println(i++);
  控制檯列印:i++先賦值,然後再自加1得到結果=0
3.short s=1;s=s+1;有什麼錯?short s=1;s+=1;有什麼錯?

答:1.對於short s=1;s=s+1;由於short資料型別和int資料型別表示範圍不一樣,所以需要進行型別轉換,解決方案是:要麼將short改為int,要麼強制型別轉換(short)s+1。
      2.對於 short s=1;s+=1;由於+=是Java的規定運算子,Java編譯器會對它進行特殊處理,因此可以正確編譯。

4.Integer和int的區別?

答:參考部落格 Integer是一個封裝int型別的封裝類,預設值為null,int是Java中8中資料型別之一,預設值為0.

5.&和&&的區別?

答:&表示邏輯運算子:必須計算左右兩個表示式之後再取結果值。&&表示運算子先計算左邊表示式如果為true,則不計算右邊。如果左邊表示式為false那麼就需要計算右邊表示式。

6.使用最有效的方式計算出2乘以4等於幾?

答:使用位運算:2<<2

位運算子 功能 案例 說明
<< 左移 a< < b 將a各位元位向左移動b位
7.String s=new String(“xyz”)建立了幾個物件?

答:建立2個String物件,一個是=null的s,一個是=“xyz”的string。

8. 靜態變數和例項變數的區別?

答:1.在語法上的區別:靜態變數前需要加static關鍵字,而例項變數不需要加。
       2.靜態變數不是某一個例項物件的屬性,它屬於類屬性,只要程式載入類的位元組碼,不需要建立任何例項物件靜態變數就可以分配空間從而被使用。必須先建立例項物件,例項變數才會被分配空間,才能使用這個例項變數。
       3. 無論建立多少例項物件,永遠只分配一個靜態變數。建立一個例項物件靜態變數會加1,但是每建立一個例項物件就會分配一個例項變數,每個例項變數的值只會自加1.

public class TestProblem {
    static int a=0;
    int b=0;
    public TestProblem() {
        a++;
        b++;
        System.out.println("靜態變數數值:"+a);
        System.out.println("例項變數數值:"+b);
    }
    public static void main(String[] args) {

        TestProblem testProblem=new  TestProblem();
        System.out.println("------------");

        TestProblem testProblem1=new  TestProblem();

    }
}
控制檯列印結果:
   靜態變數數值:1
   例項變數數值:1
   ------------
   靜態變數數值:2
   例項變數數值:1
9.switch語句能否作用在byte上,能否作用在long上,能否作用在String上?

答:1.switch常量表達式的值必須是整型(必須是int)或字元型。
     2.在.switch表示式中,括號表示式只能是一個整型表示式或列舉常量整數表示式可以是int基本資料型別會Integer包裝型別。由於byte、short、char都可以隱式轉換為int,所以這些基本資料型別及其包裝型別都可以。
          3.long和String無法隱式轉換為int型別所以不能在switch中使用。

10.簡述String、StringBuffer 和 StringBuilder 區別

答:1.String和StringBuffer的區別:它們都是用於儲存和操作字串,01.String是一個final類表示的類容不可改變。StringBuffer表示的內容可以修改。02.String實現了equals()方法,StringBuffer沒有。
        2.StringBuffer 和 StringBuilder 區別:01.StringBuffer是執行緒安全的可以在多執行緒中使用。 StringBuilder是執行緒不安全的,但是執行效率非常高!
          3.參考部落格String、StringBuffer 和 StringBuilder 區別

11.簡述自動裝箱和自動拆箱
12.簡述Java中實現多型的機制是什麼?

答:過載(overloading)、重寫(overriding)
       1.過載(overloading):是一個類中多型的表現,比如一個類中定義多個同名的方法,但它們具有不同的引數或不同引數型別都稱之為過載。
       2.重寫(overriding):子類定義一個方法和父類的方法名稱引數都相同,那麼父類的方法被重寫。
       3.參考:理解java的三大特性之多型

13.簡述Java反射機制及其作用?

答:1.Reflection:是Java被視為一種動態語言的一個關鍵性質,這個機制允許程式在執行時通過Reflection API獲取任意一個已知名稱Class的內部資訊。並可在執行時改變欄位內容,喚起methods。
       2.參考:Java反射機制詳解
       3.Java API:Class類中的方法

14.簡述ArrayList和LinkedList的區別?

答:1.ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。
       2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。
       3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。
       4.參考:ArrayList和LinkedList的區別

15.簡述HashMap的工作原理及HashMap和Hashtable的區別?
16.簡述java中super()和this()、super和this的區別?

答:1.super()和this()區別:

  • super():呼叫父類無形參的構造方法;
  • super(形參):呼叫父類中某個帶形參的構造方法;
  • this(形參):呼叫本類中另一種形式的構造方法
  • 注意:放在方法的首行;
       2.super和this的區別:

  • super.父類的成員變數;

  • super.父類的方法;
  • super:當子類中的成員變數、方法和父類的相同時,實現呼叫父類的成員變數和方法;
  • this:代表當前的物件;
  • 使用的地方:若函式的形參和成員變數同名時,需要用this.成員變數名