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

Java基礎面試題(1)

指定 xxx rep 區別 語言環境 ddd ger com 操作

1.Java中都有哪些基本數據類型,各占幾個字節?

  技術分享圖片

2.String是基本數據類型嗎?

  String不是基本數據類型,String的底層是用數組實現的。

3.String常用方法有哪些?

  length():求字符串的長度
  indexOf():求某個字符在字符串中的位置
  charAt():求一個字符串中某個位置的值
  equals():比較兩個字符串是否相同
  replace():將字符串中的某些字符用別的字符替換掉。形如replace(“abc”,”ddd”);字符串中的abc將會被ddd替換掉。
  split():根據給定正則表達式的匹配拆分此字符串。形如 String s = “The time is going quickly!”; str1=s.split(" ");


  substring():輸出一個新的字符串,它是此字符串中的子串,形如substring(3,7);它將字符串中的第四個第五個第六個輸出。
  trim():將字符串開頭的空白(空格)和尾部的空白去掉。
  format():使用指定的語言環境、格式字符串和參數返回一個格式化字符串。
  toLowerCase():將字符串中所有的大寫改變成小寫
  toUpperCase():將字符串中所有的小寫改變為大寫

4.String、StringBuffer、StringBuilder的區別?

  1.可變不可變

    String:字符串常量,在修改時不會改變自身,若修改,等於重新生成新的字符串對象

    StringBuffer:在修改時會改變自身對象,每次操作都是對StringBuffer對象本身進行修改,不是生成新的對象,使用場景:在對字符串經常改變的情況下;主要方法:append(),insert()等

    StringBuilder:是在Java5中引入的,和StringBuffer的方法完全相同,字符串對象直接對本身進行修改

  2.線程是否安全

    String:對象定義後不可變,線程安全

    StringBuffer:線程安全,對調用方法加入同步鎖,執行效率較慢,適用於多線程下操作字符串緩沖區大量數據

    StringBuilder:線程不安全,適用於單線程下操作字符串緩沖區大量數據

  3.共同點

    StringBuilder和StringBuffer有公共父類AbstractStringBuilder,該類是一個抽象類,StringBuilder和StringBuffer的方法都會調用AbstracStringBuilder中的公共方法,如super.append(),  只是StringBuffer會在方法上加synchronized關鍵字,進行同步。

    如果程序不是多線程的,那麽使用StringBuilder效率高於StringBuffer。

5.字符串如何轉基礎數據類型?基礎數據類型如何轉字符串?

  5.1字符串轉基礎數據類型:

    調用基本數據類型對應的包裝類中的方法parseXXX(String)或valueof(String)

    例:String s = "16";

      int a = Integer.parseInt(s);

      int b = Integer.valueof(s);

  5.2基本數據類型轉字符串

    1.調用String類中的valueof()方法

      例:將char類型的‘b‘轉為字符串

        String.valueof(‘b‘);

    2.調用基本數據類型的靜態方法toString()

      例:將Int類型的20轉為字符串

        String s = Int.toString(20);

    3.將基本數據類型與空字符串連接,+""

      例:int i = 200;

        String s = i+"";

6.面向對象都有哪些特性以及你對這些特性的理解?

  1)繼承:繼承是從已有類得到繼承信息創建新類的過程。提供繼承信息的類被稱為父類(超類、基類);得到繼承信息的類被稱為子類(派生類)。繼承讓變化中的軟件系統有了一定的延續性,同時繼承也是封裝程序中可變因素的重要手段。
  2)封裝:通常認為封裝是把數據和操作數據的方法綁定起來,對數據的訪問只能通過已定義的接口。面向對象的本質就是將現實世界描繪成一系列完全自治、封閉的對象。我們在類中編寫的方法就是對實現細節的一種封裝;我們編寫一個類就是對數據和數據操作的封裝。可以說,封裝就是隱藏一切可隱藏的東西,只向外界提供最簡單的編程接口。
  3)多態性:多態性是指允許不同子類型的對象對同一消息作出不同的響應。簡單的說就是用同樣的對象引用調用同樣的方法但是做了不同的事情。多態性分為編譯時的多態性和運行時的多態性。如果將對象的方法視為對象向外界提供的服務,那麽運行時的多態性可以解釋為:當 A 系統訪問 B 系統提供的服務時,B 系統有多種提供服務的方式,但一切對 A 系統來說都是透明的。方法重(overload)實現的是編譯時的多態性(也稱為前綁定),而方法重寫(override)實現的是運行時的多態性(也稱為後綁定)。運行時的多態是面向對象最精髓的東西,要實現多態需要做兩件事:1. 方法重寫(子類繼承父類並重寫父類中已有的或抽象的方法);2. 對象造型(用父類型引用引用子類型對象,這樣同樣的引用調用同樣的方法就會根據子類對象的不同而表現出不同的行為)。
  4)抽象:抽象是將一類對象的共同特征總結出來構造類的過程,包括數據抽象和行為抽象兩方面。抽象只關註對象有哪些屬性和行為,並不關註這些行為的細節是什麽。
  註意 :默認情況下面向對象有 3 大特性,封裝、繼承、多態,如果面試官問讓說出 4 大特性,那麽我們就把抽象加上去。

7.訪問權限修飾符 public、private、protected, 以及不寫(默認)時的區別?

  修飾符 當前類 同 包 子 類 其他包
  public √ √ √ √
  protected √ √ √ ×
  default √ √ × ×
  private √ × × ×

8.抽象類(abstract class)和接口(interface)有什麽異同?

  不同點:

    抽象類(abstract class):

      1.抽象類可以定義構造器、成員變量

      2.抽象類中可以有抽象方法、具體方法、靜態方法

      3.有抽象方法的類必須被聲明為抽象類,而抽象類中不一定要有抽象方法

      4.一個類只能繼承一個抽象類

      5.抽象類中的成員可以是private、默認的、protected、public

    接口(interface):

      1.接口中不能定義構造器、靜態方法

      2.接口中的方法全部都是抽象方法

      3.接口中定義的成員變量實際上都是常量

      4.一個類可以實現多個接口

      5.接口中的成員全都是public的

  相同點:

      1.都不能被實例化

      2.可以將抽象類和接口類型作為引用類型

      3.一個類如果繼承了某個抽象類或者實現了某個接口都需要對其中的抽象方法全部進行實現,否則該類仍需要被聲明為抽象類

9.重載(overload)和重寫(override)的區別?

  方法的重載和重寫都是實現多態的方式,區別在於前者實現的是編譯時的多態性,而後者實現的是運行時的多態性。重載發生在一個類中,同名的方法如果有不同的參數列表(參數類型不同、參數個數不同或者二者都不同)則視為重載;重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的返回類型,比父類被重寫方法更好訪問,不能比父類被重寫方法聲明更多的異常(裏氏代換原則)。重載對返回類型沒有特殊的要求。
方法重載的規則:
  1.方法名一致,參數列表中參數的順序,類型,個數不同。
  2.重載與方法的返回值無關,存在於父類和子類,同類中。
  3.可以拋出不同的異常,可以有不同修飾符。
方法重寫的規則:
  1.參數列表必須完全與被重寫方法的一致,返回類型必須完全與被重寫方法的返回類型一致。
  2.構造方法不能被重寫,聲明為 final 的方法不能被重寫,聲明為 static 的方法不能被重寫,但是能夠被再次聲明。
  3.訪問權限不能比父類中被重寫的方法的訪問權限更低。
  4.重寫的方法能夠拋出任何非強制異常(UncheckedException,也叫非運行時異常),無論被重寫的方法是否拋出異常。但是,重寫的方法不能拋出新的強制性異常,或者比被重寫方法聲明的更廣泛的強制性異常,反之則可以。

10.break 和 continue 的區別?
  break 和 continue 都是用來控制循環的語句。
  break 用於完全結束一個循環,跳出循環體執行循環後面的語句。
  continue 用於跳過本次循環,執行下次循環。

Java基礎面試題(1)